Я хотел бы создать запрос в MySQL, который имеет дополнительное значение. Когда значение указано, запрос фильтрован тем значением, когда значение не является всеми строками, возвращаются. Вот идея:
public function doQuery($item = 'ANY_VALUE') {
$query = "SELECT * FROM table WHERE item = ?";
db->fetchAll($query,array($item))
...
}
doQuery(); // Returns everything
doQuery($item='item1'); // Returns only rows where item = 'item1'
Существует ли простой способ сделать это, не создавая две строки запроса в зависимости от значения $item?
Насколько мне известно, такого заполнителя "любой" не существует.
Если вы можете использовать LIKE, вы можете сделать
SELECT * FROM table WHERE item LIKE '%'
, если вы можете добавить условие, вы можете аннулировать предложение item
следующим образом:
SELECT * FROM table WHERE item = ? OR 1=1
(не будет работать в вашем примере, потому что вы передаете "элемент" в качестве параметра)
Это все варианты, которые я вижу - вероятно, проще всего работать с двумя запросами, полностью удалив предложение WHERE
во втором запросе.
Это, вероятно, сработает, но я не уверен, что это хорошая идея с точки зрения базы данных.
public function doQuery($item = 'ANY_VALUE') {
$query = "SELECT * FROM table WHERE item = ? OR 1 = ?";
db->fetchAll($query,array($item, ($item == 'ANY_VALUE' ? 1 : 0))
...
}
На самом деле нет причин делать это с помощью одного запроса. Выполнение запроса без предложения WHERE явно указывает на то, что вы хотите вернуть все строки. Запуск его с предложением WHERE явно указывает на то, что вы хотите отфильтровать строки.