MySQL шаблон WHERE id = *

266
18 октября 2017, 05:28

есть шаблон запроса

"SELECT COUNT(*) FROM answers WHERE user_id=$id"

в него подставляю переменную $id - ид пользователя. Как заставить его работать, когда мне нужны все строки т.е. типа WHERE user_id=* , какую $id передать?

Answer 1

В вашем случае:

SELECT COUNT(*) FROM answers WHERE (user_id=$id or ($id is null))

или

SELECT COUNT(*) FROM answers WHERE user_id=coalesce($id,user_id)

тогда

$id = NULL;

PS: $id должен быть соответствующим образом подготовлен, иначе это SQL-иньекция.

Answer 2

Лучше не усложнять запрос, а добавлять условие тогда, когда оно действительно необходимо. Например так

   "SELECT COUNT(*) FROM answers". ($id ? " WHERE user_id=$id" : "")

Если предполагается несколько необязательных условий бывает удобно делать так

   $sql="SELECT COUNT(*) FROM answers WHERE 1=1";
   if($id)     { $sql.=" AND user_id=$id"; }
   if($field1) { $sql.=" AND filed1=$field1"; }

Для избежания возможных sql-инъекций обязательно проверяйте все переменные на корректность (например применяйте $id=int($id)). А еще лучше не подставлять переменные непосредственно в текст запроса, а поставить вместо них плейсхолдеры (обычно ?) и использовать привязку переменных к запросу.

Answer 3

Если ваша задача - получить все строки у которых указан какой-либо id, то вам необходимо =$id заменить на NOT NULL, так как если поле не заполнено - то оно считается пустым, т.е. NULL. Ну и для этого есть своя проверка.

Answer 4

Стандартный подход в таких случаях - использовать конструкцию

... where @id is null or id = @id

Ну и ещё у тебя в коде sql injection.

READ ALSO
Как запретить дублирование строки?

Как запретить дублирование строки?

Можно ли запретить вставлять значение в таблицу, если вводимое значение уже есть в некотором столбце? Необходимо, чтобы значения не повторялисьКак...

206
Ошибка “command not found: mysql”

Ошибка “command not found: mysql”

Изучаю php и mysql по книгеДошел до раздела с mysql

336
Выборка моделей по разнице между ее datetime-полями

Выборка моделей по разнице между ее datetime-полями

У меня в mySQL есть таблица schedule у которой есть поля time_start и time_end в формате datetime

218