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

问题描述 投票:0回答:2

所以我有2张桌子

表1

    id      username      category

    1       nick          1, 2

表2

    id      category
    1        friend
    2        enemy
    3        neutral

现在我想打印 id 未出现在逗号分隔值的 table1 类别列表中的类别列表。例如在本例中为“中性”。非常感谢您的帮助,我没有想法。

sql mysql delimited find-in-set
2个回答
5
投票
SELECT  b.*
FROM    table2 b 
        LEFT JOIN table1 a
            ON FIND_IN_SET(b.ID, a.category)
WHERE   a.category IS NULL

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

表1 - 用户列表

  • 用户ID(PK)
  • 用户名

表2 - 类别列表

  • 类别ID(PK)
  • 类别名称

表3 - User_Category

  • UserID (FK)(也与CategoryID PK)
  • 类别ID (FK)

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 数组中创建一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.