Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проверка уникальности новый метод?
 
 автор: Nevi   (20.05.2008 в 16:55)   письмо автору
 
 

Все знают что для проверки есть ли такая запись в таблице используется схема

$query = mysql_query("SELECT COUNT(*) FROM table1 WHERE id='".intval($data['id'])."'");
if(mysql_result($query, 0) > 0)
{ $flag_exist = true; } // уже существует
else { $flag_exist = false; } // такого нет

а я случайно придумал более простои и как мне кажется более универсальный способ , но внутренний голос подсказывает , что не может быть так все просто - значит я чего-то не знаю , значит есть какойто подвох - ПОДСКАЖИТЕ правильно ли я придумал или нет?

вот другое решение

$query = mysql_query("SELECT * FROM table1 WHERE id = '".intval($data['id'])."' LIMIT 1");
if ($query)
{
$dataquery = mysql_fetch_assoc($query);
if ($dataquery['id'] == intval($data['id']))
{ $flag_exist = true; }
else { $flag_exist = false; }
}

таким решением мы убиваем 2 зайца = узнаем есть ли в таблице такой id и получаем все значения в строке по этому id (методом count(*) получить значения полей нельзя)

Так что я не знаю - если так все просто - почему это не применяют и ни в одной книге про это не сказано - значит гдето камень подводный?

(скромно так=) .... или я изобреталь нового метода?=))))))))))))

   
 
 автор: cheops   (20.05.2008 в 17:14)   письмо автору
 
   для: Nevi   (20.05.2008 в 16:55)
 

>таким решением мы убиваем 2 зайца = узнаем есть ли в таблице такой id и получаем все
>значения в строке по этому id (методом count(*) получить значения полей нельзя)
Если вам нужны значения, а не просто факт существования записи, тогда ваш вариант более предпочтительный, не смотря на то, что запрос с COUNT() зачастую быстрее осуществляется, чем выборка записи (впрочем это справедливо лишь в том случае, если не используется WHERE-условие).

>(скромно так=) .... или я изобреталь нового метода?=))))))))))))
"Изобретатель нового метода" пожалуй слишком громко :), однако, то что вы не слепо копируете чужой код, а преобразуете его для своих нужд, делая удобнее и быстрее - очень хорошо и правильно.

   
 
 автор: Nevi   (20.05.2008 в 17:39)   письмо автору
 
   для: cheops   (20.05.2008 в 17:14)
 

уважаемый cheops

Спасибо , я вас давно заметил на этом форуме , вы один из немногих , кто реально помогает людям!

..я так и не понял - предложенный мной метод правильный или чтото в нем не так? уж слишком все просто - есть люди по умнее меня которые бы придумали этот метод раньше , однако ни в одном форуме и ни в одной книге (а у меня 2 книги по SQL - я только только начинаю учить этот язык и не знаю 99%) ничего про это не сказано

   
 
 автор: ronin80   (20.05.2008 в 18:08)   письмо автору
 
   для: Nevi   (20.05.2008 в 17:39)
 

ничего про это не сказано потому что это лишь частный случай, и сказать что он оптимальный значит не сказать ничего. всё зависит от структуры таблицы, кол-ва индексов. характера данных, поставленной задачи. может быть в этом случае данный метод и лучше а вдругом случае он может оказаться хуже. всё проверяется опытным путём :)

   
 
 автор: Nevi   (20.05.2008 в 23:15)   письмо автору
 
   для: ronin80   (20.05.2008 в 18:08)
 

спасибо вам ronin80
я лишь хотел убедится что такое возможно потому что плохо знаю MYSQL
теперь понял что что возможно

   
 
 автор: cheops   (21.05.2008 в 11:25)   письмо автору
 
   для: Nevi   (20.05.2008 в 17:39)
 

>..я так и не понял - предложенный мной метод правильный или чтото в нем не так?
Да, всё правильно и в вашем случае он наиболее эффективен.

>ничего про это не сказано
Сложно описать все случаи или даже отказаться от собственных стереотипов. Однако это даже хорошо, так как обучаясь языку вы и должны делать такие открытия, рассматривать то, что пишется в книгах и манулов как кирпичики из которых в конце концов будет построен ваш дом. Если для его постройки нужно лишь пол кирпича, то безжалостно ломать готовый кирпич попалам :)))

   
 
 автор: Axxil   (20.05.2008 в 23:35)   письмо автору
 
   для: Nevi   (20.05.2008 в 16:55)
 

Можно ещё проще :)


<?
  $query 
mysql_query("SELECT * FROM table1 WHERE id = '".intval($data['id'])."' LIMIT 1");
  
$flag_exist = (bool)mysql_num_rows($query);
?>


Лучший метод для определения качества и скорости кода - эксперимент.
Сделайте таблицу тыщ на сто строк и замерьте скорость при всех типах выборки.
Метод трудоёмкий, зато 100% точный :).

Я так иногда развлекаюсь, когда нападает зуд оптимизаторства.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования