есть шаблон запроса
"SELECT COUNT(*) FROM answers WHERE user_id=$id"
в него подставляю переменную $id - ид пользователя. Как заставить его работать, когда мне нужны все строки т.е. типа WHERE user_id=*
, какую $id
передать?
В вашем случае:
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-иньекция.
Лучше не усложнять запрос, а добавлять условие тогда, когда оно действительно необходимо. Например так
"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)
). А еще лучше не подставлять переменные непосредственно в текст запроса, а поставить вместо них плейсхолдеры (обычно ?
) и использовать привязку переменных к запросу.
Если ваша задача - получить все строки у которых указан какой-либо id, то вам необходимо =$id
заменить на NOT NULL
, так как если поле не заполнено - то оно считается пустым, т.е. NULL. Ну и для этого есть своя проверка.
Стандартный подход в таких случаях - использовать конструкцию
... where @id is null or id = @id
Ну и ещё у тебя в коде sql injection.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли запретить вставлять значение в таблицу, если вводимое значение уже есть в некотором столбце? Необходимо, чтобы значения не повторялисьКак...
У меня в mySQL есть таблица schedule у которой есть поля time_start и time_end в формате datetime