MySQL where clause equals anything (SELECT * WHERE col = ANY_VALUE)

前端 未结 3 811
长情又很酷
长情又很酷 2020-12-17 09:31

I\'d like to create a query in MySQL that has an optional value. When the value is specified the query is filtered by that value, when the value is not all rows are returned

3条回答
  •  情话喂你
    2020-12-17 09:49

    As far as I know, no such "any" placeholder exists.

    If you can use LIKE, you could do

    SELECT * FROM table WHERE item LIKE '%'
    

    if you can append a condition, you could nullify the item clause like this:

    SELECT * FROM table WHERE item = ? OR 1=1
    

    (won't work in your example though, because you are passing "item" as a parameter)

    That's all the options I can see - it's probably easiest to work with two queries, removing the WHERE clause altogether in the second one.

    This would probably work, but I*m not sure whether it's a good idea from a database point of view.

    public function doQuery($item = 'ANY_VALUE') {
      $query = "SELECT * FROM table WHERE item = ? OR 1 = ?";
      db->fetchAll($query,array($item, ($item == 'ANY_VALUE' ? 1 : 0))
      ...
    }
    

提交回复
热议问题