#php #mysql
#php #mysql
Вопрос:
мне пришлось проверить, есть ли значение (строка) в моей базе данных.
на данный момент я делаю
select a.email,b.vuid from user a, verteiler_user b where a.email=''.$email.'' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid
как запрос с mysql_num_rows
, затем проверьте if >=1
Но быстрее ли выполнить запрос с ограничением 1; ? и проверить, возвращается ли строка?
Ответ №1:
ДА. Было бы быстрее выполнить limit 1
запрос. И если все, что вы делаете, это проверяете наличие строки, зачем беспокоиться о возврате всех этих столбцов? Просто выберите 1
. Это будет (незначительно) быстрее. Кстати: Ваш код выглядит уязвимым для атак с использованием SQL-инъекций. Рассмотрите возможность очистки динамических частей вашего запроса с помощью mysql_real_escape_string()
или аналогичной функции.
Комментарии:
1. @Roby: Вы приняли этот ответ, но затем не приняли его. Почему? Вам нужны какие-либо дополнительные разъяснения?
Ответ №2:
LIMIT 1
будет иметь лучшую производительность, потому что он перестанет соответствовать, когда LIMIT
будет удовлетворен.
Если вы ожидаете только 1 строку, добавьте LIMIT 1
в свой запрос.
Кроме того, если вы проверяете только наличие этой строки в запросе, нет необходимости использовать имена столбцов с SELECT
в запросе. Просто используйте SELECT 1...
.
Ответ №3:
вы могли бы попробовать:
select count(*) from user a, verteiler_user b
where a.email=''.$email.'' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid
и получаем количество по:
$row=mysql_fetch_array(...);
if ($row[0] > 0) // is there a hit?
...