SQL-使用占位符检索类似于占位符的行

时间:2019-03-04 13:51:32

标签: mysql sql wildcard placeholder

我有3张桌子;

饮料

Restaurant

食物

Food

饮料

Drinks

饮料tbl通过RestID加入餐厅,食品tbl通过RestID加入餐厅

我正在尝试创建一个执行以下操作的查询;

  • 用户输入他们想要的食物(例如汉堡)
  • 用户输入的饮料(例如吉尼斯酒)
  • 查询返回提供这两个项目的餐厅

我正在尝试创建一个查询,以检查Drinks表的drinkvarietydrinkname列中输入的饮料是否都是LIKE文本,并检查{{1 }}和foodcategory。仅当查询输入的占位符为“任一列”时,餐厅才会返回结果。

我尝试使用此查询创建此查询,但是语法必须错误,因为它不会按预期返回;

foodname

注意:上面目前仅检查每个表1列。我知道,但这仍然行不通。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您不得在查询中的带引号的SQL字符串文字中放置?参数占位符。参数是使用字符串文字的一种替代方法。

我会这样写查询:

SELECT DISTINCT r.restname
FROM restaurants r
JOIN food f ON f.restid = r.restid
JOIN drinks d ON d.restid = r.restid
WHERE f.foodcategory LIKE ?
AND d.drinkvariety LIKE ?

然后,在将“%”添加到应用程序中的字符串变量之后,我将参数作为字符串传递。

替代:在SQL中添加和添加通配符,但将参数占位符分开。

SELECT DISTINCT r.restname
FROM restaurants r
JOIN food f ON f.restid = r.restid
JOIN drinks d ON d.restid = r.restid
WHERE f.foodcategory LIKE CONCAT('%', ?, '%')
AND d.drinkvariety LIKE CONCAT('%', ?, '%')

无论使用哪种解决方案,占位符都仍不能在SQL字符串文字中。

否则,您将如何在SQL中搜索文字问号?

答案 1 :(得分:0)

使用exists

SELECT r.restname
FROM restaurants r
WHERE EXISTS (SELECT 1
              FROM food f 
              WHERE f.restid = r.restid AND
                     f.foodcategory LIKE CONCAT('%', ?, '%')
             ) AND
      EXISTS (SELECT 1
              FROM drinks d
              WHERE d.restid = r.restid AND
                    d.drinkcategory LIKE CONCAT('%', ?, '%')
             ) ;