当我希望查询返回值列表中至少一个值与值列表中至少一个值匹配的所有行时,查询MySql的最佳方法是什么?



如果我的表包含以下行:

name         groups
item1        gr1, gr2
item2        gr1,gr2,gr3
item3        gr1,gr3


我有一个值列表:“ gr3,gr4,gr5”

我想查找我的表中所有在其group字段中至少具有值gr3,gr4或gr5之一的行。

因此,在这种情况下,查询应返回item2和item3

如何在不循环脚本的情况下构造有效的查询?

最佳答案

我个人认为这不是构建数据库的最佳方法。我将有一个链接表,类似item_groups的表,该表将为每个item-group链接保留一行,因此您将拥有:

item_name         group_name
item1        gr1
item1        gr2
item2        gr1
item2        gr2
item2        gr3
item3        gr1
item3        gr3


这样你就可以做

SELECT item_name FROM item_groups WHERE group_name IN ('gr3','gr4','gr5');


这是我将数据库理论作为BSc的一部分时所教给我的,虽然它的确产生了更多的表格,但它使搜索变得更快,更容易。
高温超导

关于mysql - 在MySQL ListOfValues中查询匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1571530/

10-12 05:35