如何对包含逗号分隔值的列执行查询

时间:2013-04-29 13:42:34

标签: mysql sql

所以我有2张桌子

表1

    id      username      category

    1       nick          1, 2

表2

    id      category
    1        friend
    2        enemy
    3        neutral

现在我想要打印一个列表,其中只有id不会出现在昏迷分隔值的table1类别列表中。例如在这种情况下'中立'。非常感谢我帮助我摆脱想法。

2 个答案:

答案 0 :(得分:5)

SELECT  b.*
FROM    table2 b 
        LEFT JOIN table1 a
            ON FIND_IN_SET(b.ID, a.category)
WHERE   a.category IS NULL

考虑正确规范您的表格。将逗号分隔值保存在单个列中是个坏主意。如果您有更大的数据库,问题将很快出现。这是我提出的Schema:

表1 - UserList

  • UserID(PK)
  • 用户名

表2 - CategoryList

  • CategoryID(PK)
  • 类别名称

表3 - User_Category

  • UserID(FK)(也是带有CategoryID的PK)
  • CategoryID(FK)

答案 1 :(得分:0)

有什么困难吗?首先,查询select category from table1(例如,将结果存储在$ res中)。然后像while($arr = $res->fetch_row())这样的循环以类似于$ids = explode(",",$arr[0])的方式检索用户的类别数组,并将其附加到所有使用过的列表中(如$all_ids = array_merge($all_ids, $ids)

好了,现在您已经使用了所有ID的数组,现在使用查询select * from table2和循环while($row = $res->fetch_row)只需执行if($row[0] not in $all_ids)$free_cats[]=$row[1]

我希望你现在能弄明白如何用这个$ free_cats数组创建一个字符串。