Mysql SQL-使用占位符检索与占位符类似的行
我有三张桌子 饮料 食物 饮料 饮料tbl通过RestID连接到餐厅,食品tbl通过RestID连接到餐厅 我正在尝试创建一个查询,该查询执行以下操作: 用户输入他们想要的食物,例如汉堡 用户输入他们想要的饮料,例如吉尼斯 查询将返回提供这两个项目的餐厅 我试图创建一个查询,检查输入的饮料是否与饮料表中的drinkvariety和drinkname列中的文本相似,并检查输入的食品是否与食品表中的foodcategory和foodname中的文本相似。只有当查询输入的占位符与任一列相似时,餐厅才会返回结果 我曾尝试使用此方法创建此查询,但语法肯定是错误的,因为它没有按预期返回Mysql SQL-使用占位符检索与占位符类似的行,mysql,sql,wildcard,placeholder,Mysql,Sql,Wildcard,Placeholder,我有三张桌子 饮料 食物 饮料 饮料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('%', ?, '%')
) ;