|
|
|
| Все знают что для проверки есть ли такая запись в таблице используется схема
$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(*) получить значения полей нельзя)
Так что я не знаю - если так все просто - почему это не применяют и ни в одной книге про это не сказано - значит гдето камень подводный?
(скромно так=) .... или я изобреталь нового метода?=)))))))))))) | |
|
|
|
|
|
|
|
для: Nevi
(20.05.2008 в 16:55)
| | >таким решением мы убиваем 2 зайца = узнаем есть ли в таблице такой id и получаем все
>значения в строке по этому id (методом count(*) получить значения полей нельзя)
Если вам нужны значения, а не просто факт существования записи, тогда ваш вариант более предпочтительный, не смотря на то, что запрос с COUNT() зачастую быстрее осуществляется, чем выборка записи (впрочем это справедливо лишь в том случае, если не используется WHERE-условие).
>(скромно так=) .... или я изобреталь нового метода?=))))))))))))
"Изобретатель нового метода" пожалуй слишком громко :), однако, то что вы не слепо копируете чужой код, а преобразуете его для своих нужд, делая удобнее и быстрее - очень хорошо и правильно. | |
|
|
|
|
|
|
|
для: cheops
(20.05.2008 в 17:14)
| | уважаемый cheops
Спасибо , я вас давно заметил на этом форуме , вы один из немногих , кто реально помогает людям!
..я так и не понял - предложенный мной метод правильный или чтото в нем не так? уж слишком все просто - есть люди по умнее меня которые бы придумали этот метод раньше , однако ни в одном форуме и ни в одной книге (а у меня 2 книги по SQL - я только только начинаю учить этот язык и не знаю 99%) ничего про это не сказано | |
|
|
|
|
|
|
|
для: Nevi
(20.05.2008 в 17:39)
| | ничего про это не сказано потому что это лишь частный случай, и сказать что он оптимальный значит не сказать ничего. всё зависит от структуры таблицы, кол-ва индексов. характера данных, поставленной задачи. может быть в этом случае данный метод и лучше а вдругом случае он может оказаться хуже. всё проверяется опытным путём :) | |
|
|
|
|
|
|
|
для: ronin80
(20.05.2008 в 18:08)
| | спасибо вам ronin80
я лишь хотел убедится что такое возможно потому что плохо знаю MYSQL
теперь понял что что возможно | |
|
|
|
|
|
|
|
для: Nevi
(20.05.2008 в 17:39)
| | >..я так и не понял - предложенный мной метод правильный или чтото в нем не так?
Да, всё правильно и в вашем случае он наиболее эффективен.
>ничего про это не сказано
Сложно описать все случаи или даже отказаться от собственных стереотипов. Однако это даже хорошо, так как обучаясь языку вы и должны делать такие открытия, рассматривать то, что пишется в книгах и манулов как кирпичики из которых в конце концов будет построен ваш дом. Если для его постройки нужно лишь пол кирпича, то безжалостно ломать готовый кирпич попалам :))) | |
|
|
|
|
|
|
|
для: 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% точный :).
Я так иногда развлекаюсь, когда нападает зуд оптимизаторства. | |
|
|
|