gpt4 book ai didi

mysql - 在多列上搜索mysql中的一系列值

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:17 25 4
gpt4 key购买 nike

在我的数据库中,每个用户可以有5个标签,是从1到37的整数。

例如,如果一个用户只有一个标签,则数据库显示:

tag1 : 36
tag2 : 0
tag3 : 0
tag4 : 0
tag5 : 0

在“搜索用户”页面,您可以选择1到5个标签(输入名称为skill1到skill5),页面必须显示相应的个人资料。

目前,如果您只选择一个标签,效果很好,有这个请求:

WHERE tag1 REGEXP '$skill1|$skill2|$skill3|$skill4|$skill5'

但我不知道如何让它适用于 1 到 5 个标签。

我的目标是让一个请求看起来像:

WHERE (tag1 or tag2 or tag3 or tag4 or tag5) REGEXP '$skill1|$skill2|$skill3|$skill4|$skill5'

还有,有没有办法考虑结果?比如,一开始,用户有你搜索的4个标签,然后是3个标签,等等。

有没有简单的方法可以做到这一点?

最佳答案

你的数据结构很差。您应该有一个联结表,每个实体和每个标签一行。

你可以做你想做的:

where tag1 in ($skill1, $skill2, $skill3, $skill4, $skill5) or
tag2 in ($skill1, $skill2, $skill3, $skill4, $skill5) or
tag3 in ($skill1, $skill2, $skill3, $skill4, $skill5) or
tag4 in ($skill1, $skill2, $skill3, $skill4, $skill5) or
tag5 in ($skill1, $skill2, $skill3, $skill4, $skill5)
order by ( (tag1 in ($skill1, $skill2, $skill3, $skill4, $skill5)) +
(tag2 in ($skill1, $skill2, $skill3, $skill4, $skill5)) +
(tag3 in ($skill1, $skill2, $skill3, $skill4, $skill5)) +
(tag4 in ($skill1, $skill2, $skill3, $skill4, $skill5)) +
(tag5 in ($skill1, $skill2, $skill3, $skill4, $skill5))
) desc

MySQL 将数字上下文中的 bool 值视为 1 表示真,0 表示假。

注意:如果您希望用户输入允许正则表达式模式匹配,您可以使用 regexp 做同样的事情。

关于mysql - 在多列上搜索mysql中的一系列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496104/

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