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