gpt4 book ai didi

php - Where Like 语句选择带有特定标签的记录

转载 作者:行者123 更新时间:2023-11-29 01:29:21 25 4
gpt4 key购买 nike

我的表看起来像这样:

id | title         | tags
1 | I like things | 9,3,7,10
2 | Stuff about i | 12,3,7,10
3 | Overly loaded | 1,3,4,5
4 | Never ever AT | 12,10
4 | Forever alone | 9

注意:名称是虚构的,仅供引用

关于标签的事情:

  • 数字代表给定标签的数字 ID,范围从 012
  • 1912 将始终是此列表中的第一个标签,然后是按排序顺序排列的其余标签从低到高
  • 一个条目也可以只有一个标签,1912

我想添加一个过滤器功能,允许用户使用这些标签过滤列表。让我们忽略客户端部分,只关心我们收到什么。

比方说,脚本接收以下输入(始终排序):"3,4,9"

然后,我想将其传递给 MySQL 查询以检索匹配项。该网站也有分页功能,但我这么说只是因为它可能会影响语句的顺序,否则并不重要。它只是在末尾添加了一个 LIMIT 语句。

把所有的转义和不放在一边,我尝试使用的查询是

SELECT * FROM `$tablename` WHERE tags LIKE '%$input%' ORDER BY title ASC LIMIT 0,10

但这当然没有奏效。我给了我这个不错的小错误消息,说:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''%3,4,9%' ORDER BY title ASC LIMIT 0,10' at line 1 in script.php on line n

我想知道如何更改此查询以便能够正确过滤结果,即使它需要一个额外的函数来将多个 LIKE 语句附加在一起。

最佳答案

WHERE tags LIKE '%$input%'

仅当在标签字符串中找到输入标签列表时才有效。 “3,4,9”不像“3,4,5,9”

你有一个非规范化的结构,这给你带来了问题,你应该实现每个标签值一行。

另一种方法是拆分输入字符串并使用多个 OR LIKE 语句:

WHERE tags LIKE '%input1%'
OR tags LIKE '%input2%'
....

然后你要处理1匹配到11的问题,也就是在LIKE<前后两边用逗号拼接 语句,或填充一些值。解决方法变成了丑陋的野兽,其效率远低于解决底层设计问题。

关于php - Where Like 语句选择带有特定标签的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919560/

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