Intereting Posts
Странные символы при заполнении PDF с помощью PDFTk Сортировка многомерного ассоциативного массива для определенного ключа по его значению возрастает Сервер WAMP не работает Доступ к многомерному массиву с помощью Codeigniter Как распечатать содержимое элемента OBJECT при использовании меню FILE-> PRINT? Как анализировать большие данные через запрос POST Переопределение php.ini на сервере PHP Regex находит текст между настраиваемыми добавленными тегами HTML Назначение в PHP с помощью выражения bool: странное поведение mysql_real_escape_string VS добавляет Как создать или изменить класс PHP во время выполнения? Как обновить плагин wordpress за определенный промежуток времени, который я выбрал? Возможно ли создать приложение iphone / android на базе php с помощью PhoneGap или Appcelerator? Подсчитайте строку, содержащую слово «118-bonsplans.com» в csv-файле, используя php Запись всех запросов и ответов на мыло в PHP

MySQL где предложение равно чему угодно (SELECT * WHERE col = 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?

Насколько мне известно, такого «какого-либо» заполнителя нет.

Если вы можете использовать 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)) ... } 

Лучший способ сделать это – сначала сгенерировать sql-запрос из параметра, который вам нужно беспокоить, а затем выполнить.

 function doQuery($params) { $query = 'SELECT * FROM mytable '; if (is_array($params) // or whatever your condition ) { $query .= 'WHERE item = ' . $params[0]; } $query .= ' ;'; // execute generated query execute($query); } 

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