所以我有2张桌子
表1
id username category
1 nick 1, 2
表2
id category
1 friend
2 enemy
3 neutral
现在我想要打印一个列表,其中只有id不会出现在昏迷分隔值的table1类别列表中。例如在这种情况下'中立'。非常感谢我帮助我摆脱想法。
答案 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
表2 - CategoryList
表3 - User_Category
答案 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数组创建一个字符串。