0

所以我有 2 张桌子

表格1

    id      username      category

    1       nick          1, 2

表2

    id      category
    1        friend
    2        enemy
    3        neutral

现在我想打印一个列表,其中包含 id 未出现在逗号分隔值的 table1 类别列表中的类别。例如在这种情况下“中性”。非常感谢我没有想法的帮助。

4

2 回答 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)
于 2013-04-29T13:44:19.627 回答
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 数组中创建一个字符串。

于 2013-04-29T13:58:50.980 回答