Проверка поля таблицы....

phpusershik

Using PHP
Проверка поля таблицы....

Есть база на мускуле и таблица (data ) с полями:

did, date, val, col2
И туда делаю инсерт типа:

$sql = "INSERT INTO data (col2,date,val) VALUES ('$col','$date','$val')";

Надо проверить если там с той же датой (date) с тем же (col2) есть ли запись то не добавлять иначе добавлять то есть я не хочу что-бы два раза добавлялось.

Есть у меня вот один такой вариант:

Он сперва с помощью селекта выбирает из базы по date и col2 и если там есть то он недобавляет и выводит что есть, иначе он добавляет...
Селект могу зделать а вот после него как условие писать каким образом если есть или нету?
 

mike

pmcoder
СОЗДАЙ уникальный ключ на поля date и col2
Это надежнее всего...
 

phpusershik

Using PHP
Автор оригинала: Romantik
http://www.mysql.com/replace
почитай, может сгодится для твоего случая
там написано "что и новая, то старая запись перед занесением новой будет удалена." а мне не надо удалят ни новый ни старый просто если там по той же датой (date) с тем же (col2) есть запис он просто скажет иди и делай Апдейт....

-~{}~ 13.07.05 15:53:

Автор оригинала: Romantik
mike
а если на одну дату 2 col2 ?
Я всю проверку и для того делаю что-бы на одну дату не вставлялось два col2 а если уже один есть он только выведет окно иди и делай апдейт....
 

mike

pmcoder
тогда сделай уникальный ключ на дату

-~{}~ 13.07.05 14:56:

а вообще в чем проблема проверить результат запроса:

select count(*) from data where date=$date
 

phpusershik

Using PHP
Автор оригинала: mike
тогда сделай уникальный ключ на дату
А где можно прочесть как зделать уникальный ключ на дату?

-~{}~ 13.07.05 16:00:

а вообще в чем проблема проверить результат запроса:

select count(*) from data where date=$date [/QUOTE]
а дальше как допустим date=$date как зделать что если так то ненадо иначе да?
 

mike

pmcoder
А где можно прочесть как зделать уникальный ключ на дату?
В любой книжке по SQL
как зделать что если так то ненадо иначе да?
$result = mysql_fetch_array(mysql_query(select count(*) from data where date=$date));

if ($result[0]==0) то ИНСЕРТ
иначе НЕНАДО

-~{}~ 13.07.05 15:12:

Кстати он называется не уникальный ключ а уникальный индекс
Извини запарился...
Добавить можно таким запросом

ALTER TABLE `data` ADD UNIQUE index_name (date)
 

phpusershik

Using PHP
$result = mysql_fetch_array(mysql_query(select count(*) from data where date=$date));

if ($result[0]==0) то ИНСЕРТ
иначе НЕНАДО

Сделал вот так а он все равно добавляет не смотрит на то там есть или нет:

$db = @mysql_connect("$databasehost", "$databaseuser", "$databasepasswd");
@mysql_select_db("$databasename",$db);

for ($g=0; $g<count($val); $g++) {
for ($g=0; $g<count($col1); $g++) {
$a1=(addslashes($val[$g]));
$ar2=(addslashes($col1[$g]));
$s0 = "select count(*) from data where date=$sdata and col2=$a2";
$s1 = mysql_query($s0,$db);
$result25 = mysql_fetch_array($s1);
if (($result25[0]==0))
{

$sql1 = "INSERT INTO data (col2,date,val) VALUES ('$a2','$sdata','$a1')";
$result1 = mysql_query($sql1);

}
else
{
for ($t=0; $t<count($name); $t++) {
$a3=(addslashes($name[$t]));
echo "You have - $a3 with same date - $sdata";
}
}
}}
for ($t=0; $t<count($name); $t++) {
$a3=(addslashes($name[$t]));
$non=(int)($t+1);
echo "<font color=\"black\">$non - </font><font color=\"red\">Day Value for: - <font color=\"blue\">$a3</font> - for <font color=\"blue\">$sdata</font> date has been added !!!</font><br>";
}

А ты уверен что:

это часть должна быть так:
if (($result25[0]==0))
???
 

Shurik

Guest
Попробуй так:
PHP:
$sql  = 'SELECT count(*) FROM data WHERE date='.$date.' AND col2='.$col2;
$result = mysql_query($sql);
if ($result) :
   $result = mysql_num_rows($result);
   if ($result) :
      не добавлять
   else :
      добавлять
   endif;
else :
   select не выполнен
endif;
 

mike

pmcoder
Я всю проверку и для того делаю что-бы на одну дату не вставлялось два col2 а если уже один есть он только выведет окно иди и делай апдейт....
Я не понимаю, утебя не должно быть такой ситуации:

1988 - САМОЛЕТ
1988 - АВТОМОБИЛЬ

или

1988 - АВТОМОБИЛЬ
1988 - АВТОМОБИЛЬ
1988 - АВТОМОБИЛЬ

или ни той ни другой, а только

1988 - АВТОМОБИЛЬ
и все, больше с 1988 ничего не должно быть
 

phpusershik

Using PHP
Автор оригинала: mike
Я не понимаю, утебя не должно быть такой ситуации:

1988 - САМОЛЕТ
1988 - АВТОМОБИЛЬ

или

1988 - АВТОМОБИЛЬ
1988 - АВТОМОБИЛЬ
1988 - АВТОМОБИЛЬ

или ни той ни другой, а только

1988 - АВТОМОБИЛЬ
и все, больше с 1988 ничего не должно быть
Вот так должно быть:

1988-05-12 - САМОЛЕТ
1988-05-12 - АВТОМОБИЛЬ

А без проверки он добавляет вот так:

1988-05-12 - САМОЛЕТ
1988-05-12 - АВТОМОБИЛЬ
1988-05-12 - АВТОМОБИЛЬ
1988-05-12 - АВТОМОБИЛЬ
 

phpusershik

Using PHP
Автор оригинала: Shurik
Попробуй так:
PHP:
$sql  = 'SELECT count(*) FROM data WHERE date='.$date.' AND col2='.$col2;
$result = mysql_query($sql);
if ($result) :
   $result = mysql_num_rows($result);
   if ($result) :
      не добавлять
   else :
      добавлять
   endif;
else :
   select не выполнен
endif;
for ($g=0; $g<count($val); $g++) {
for ($g=0; $g<count($col1); $g++) {
$a1=(addslashes($val[$g]));
$a2=(addslashes($col1[$g]));
$sql = "SELECT count(*) FROM data WHERE date= $sdata AND col2=$a2 ";
$result = mysql_query($sql,$db);
$result45 = mysql_num_rows($result);
if (($result45))
{
$sql1 = "INSERT INTO data (col2,date,val) VALUES ('$a2','$sdata','$a1')";
$result1 = mysql_query($sql1);
}
else
{
for ($t=0; $t<count($name); $t++) {
$a3=(addslashes($name[$t]));
echo "You have - $a3 with same date - $sdata";
}
}
}}

Но онто же добавляет но не проверяет есть ли с такой датой и col1 или нет.
 

phpusershik

Using PHP
Автор оригинала: mike
PHP:
print_r($result45);
Он выдал десять единиц:
1111111111

Но туда добавлял я 9 запросов и 1 такой уже там был то есть он должен был-бы добавить 8 и на одного он должен был бы сказать что такой уже есть, но не сделал.

А зачем он выдал 10 единиц если всего запросов было 9???

-~{}~ 14.07.05 15:27:

Автор оригинала: mike
Выполни запрос

mysql_query("ALTER TABLE `data` ADD UNIQUE index_name (date,col2)")
А стоит ли выполнить этот запрос в мускуле?
 

Shurik

Guest
Автор оригинала: phpusershik
for ($g=0; $g<count($val); $g++) {
for ($g=0; $g<count($col1); $g++) {
$a1=(addslashes($val[$g]));
$a2=(addslashes($col1[$g]));
$sql = "SELECT count(*) FROM data WHERE date= $sdata AND col2=$a2 ";
$result = mysql_query($sql,$db);
$result45 = mysql_num_rows($result);
if (($result45))
{
$sql1 = "INSERT INTO data (col2,date,val) VALUES ('$a2','$sdata','$a1')";
$result1 = mysql_query($sql1);
}
else
{
for ($t=0; $t<count($name); $t++) {
$a3=(addslashes($name[$t]));
echo "You have - $a3 with same date - $sdata";
}
}
}}

Но онто же добавляет но не проверяет есть ли с такой датой и col1 или нет.
Я не понял, что ты имел ввиду своим кодом.
Мой код у меня работает на 100%

-~{}~ 14.07.05 15:35:

Могу обьяснить построчно:

PHP:
// Формирование запроса
$sql  = 'SELECT count(*) FROM data WHERE date='.$date.' AND col2='.$col2; 
// запрос
$result = mysql_query($sql); 
// СЕЛЕКТ выполнен
if ($result) : 
   // Проверка количества затронутых СЕЛЕКТОМ рядов
   $result = mysql_num_rows($result); 
   // Кол-во рядо > 0
   if ($result) : 
      не добавлять 
   // Кол-во рядо = 0
   else : 
      добавлять 
   endif; 
else : 
   select не выполнен 
endif;
 

phpusershik

Using PHP
Автор оригинала: Shurik
Я не понял, что ты имел ввиду своим кодом.
Мой код у меня работает на 100%

-~{}~ 14.07.05 15:35:

Могу обьяснить построчно:
А у тебя он работал без уникального индекса в мускуле или после уникального индекса?
Потому-что я ещё не сделал уникальный индекс в мускуле...
Может из за этого он не работает?
 
Сверху