gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:49:56 37 4
gpt4 key购买 nike

我有3张 table ;

饮料

Restaurant

食物

Food

饮料

Drinks

Drink tbl通过RestID加入Restaurant,Food tbl通过RestID加入Restaurant

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

  • 用户输入他们想要的食物(例如汉堡)
  • 用户输入他们想要的饮料(例如 Guinness)
  • 查询返回提供这两种商品的餐厅

我正在尝试创建一个查询,检查输入的饮料是否与 Drinks 表中的 drinkvarietydrinkname 列中的文本相似,并检查输入的食物是否相似Food 表中 foodcategoryfoodname 中的文本。仅当查询输入的占位符与任一列相似时,餐厅才会作为结果返回。

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

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 中搜索文字问号?

关于mysql - SQL - 使用占位符检索与占位符类似的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54984673/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com