MySQL, где пункт равняется чему-либо (ВЫБОР * ГДЕ седло = ANY_VALUE)

Я хотел бы создать запрос в 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?

20
задан user27478 7 August 2010 в 14:11
поделиться

2 ответа

Насколько мне известно, такого заполнителя "любой" не существует.

Если вы можете использовать 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))
  ...
}
20
ответ дан 30 November 2019 в 01:08
поделиться

На самом деле нет причин делать это с помощью одного запроса. Выполнение запроса без предложения WHERE явно указывает на то, что вы хотите вернуть все строки. Запуск его с предложением WHERE явно указывает на то, что вы хотите отфильтровать строки.

-2
ответ дан 30 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: