- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的表看起来像这样:
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
注意:名称是虚构的,仅供引用
关于标签的事情:
0
到 12
1
、9
和 12
将始终是此列表中的第一个标签,然后是按排序顺序排列的其余标签从低到高1
、9
或 12
。我想添加一个过滤器功能,允许用户使用这些标签过滤列表。让我们忽略客户端部分,只关心我们收到什么。
比方说,脚本接收以下输入(始终排序):"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/
我是一名优秀的程序员,十分优秀!