所以我有 2 张桌子
表格1
id username category
1 nick 1, 2
表2
id category
1 friend
2 enemy
3 neutral
现在我想打印一个列表,其中包含 id 未出现在逗号分隔值的 table1 类别列表中的类别。例如在这种情况下“中性”。非常感谢我没有想法的帮助。
SELECT b.*
FROM table2 b
LEFT JOIN table1 a
ON FIND_IN_SET(b.ID, a.category)
WHERE a.category IS NULL
考虑正确规范您的表格。将逗号分隔值保存在单个列中是一个坏主意。如果您有更大的数据库,很快就会出现问题。这是我提出的架构:
表 1 - 用户列表
表 2 - 类别列表
表 3 - User_Category
这有什么难的?首先,查询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 数组中创建一个字符串。