表A
id name
1 name1
2 name2
3 name3
4 name4
表B
id userlist
1 1,2,3,4
我现在所做的是
SELECT `userlist` FROM `table B` WHERE `id` = 1
然后保存结果并输入第二个查询
SELECT `name` FROM `table A` WHERE `id` in ($userlist)
只是想知道是否有更好的方法。我试试
SELECT `name` FROM `table A` WHERE `id` in (SELECT `userlist` FROM `table B` WHERE `table B`.`id` = 1)
但它只返回1个结果。
编辑*
DB结构因为里面的数据太多而无法改变。我只是尝试优化旧代码。
答案 0 :(得分:3)
您可以使用FIND_IN_SET:
SELECT `name`
FROM `table A` INNER JOIN `table B` ON
FIND_IN_SET(`table A`.`id`, `table B`.`userlist`)
WHERE `table B`.`id` = 1
但我建议你规范你的表格。
答案 1 :(得分:2)
解决此问题的正确方法是更改表定义并使用JOIN。例如
表A
id name b_id
1 name1 1
2 name2 1
3 name3 1
4 name4 1
表B
id
1
要从表A获取具有B id 1的名称,您需要写:
select name from A join B on A.b_id = B.id where B.id = 1
或者,如果您无法更改表A,请定义一个新表来维护关系A-B:
表A
id name
1 name1
2 name2
3 name3
4 name4
表B
id
1
表A_B
a_id b_id
1 1
2 1
3 1
4 1
用于提取数据的SQL:
select name from A join A_B on A.id = A_B.b_id where A_B.b_id = 1