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

Mysql SQL-使用占位符检索与占位符类似的行,mysql,sql,wildcard,placeholder,Mysql,Sql,Wildcard,Placeholder,我有三张桌子 饮料 食物 饮料 饮料tbl通过RestID连接到餐厅,食品tbl通过RestID连接到餐厅 我正在尝试创建一个查询,该查询执行以下操作: 用户输入他们想要的食物,例如汉堡 用户输入他们想要的饮料,例如吉尼斯 查询将返回提供这两个项目的餐厅 我试图创建一个查询,检查输入的饮料是否与饮料表中的drinkvariety和drinkname列中的文本相似,并检查输入的食品是否与食品表中的foodcategory和foodname中的文本相似。只有当查询输入的占位符与任一列相似时,餐厅才会

我有三张桌子

饮料

食物

饮料

饮料tbl通过RestID连接到餐厅,食品tbl通过RestID连接到餐厅

我正在尝试创建一个查询,该查询执行以下操作:

用户输入他们想要的食物,例如汉堡 用户输入他们想要的饮料,例如吉尼斯 查询将返回提供这两个项目的餐厅 我试图创建一个查询,检查输入的饮料是否与饮料表中的drinkvariety和drinkname列中的文本相似,并检查输入的食品是否与食品表中的foodcategory和foodname中的文本相似。只有当查询输入的占位符与任一列相似时,餐厅才会返回结果

我曾尝试使用此方法创建此查询,但语法肯定是错误的,因为它没有按预期返回

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 '%?%'
注:以上内容目前仅检查每个表的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中搜索文字问号?

使用存在:


那素食区呢?对不起。。。什么素食区怎么样,抱歉,我很困惑。。。
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('%', ?, '%')
             ) ;