为了获得最佳用户,我在MySql TABLE中添加了带有单独逗号的用户id。Example : 1,2,3现在我使用PHP explode()函数来实现这个结果:
$bestuser = explode(',',$bestuser);我有另一个MySql表,用于这一行的用户列表:id/name/datejoin/生日会.
现在,我需要使用MySql联接方法打印最佳用户的名称。实际上,我的意思是如何将爆炸结果与其他MySql表结果组合起来。
注意到:我知道这个设计(1,2,3)很糟糕,但我别无选择。
发布于 2013-01-18 00:15:08
您可以编写一个SQL查询来执行此操作:
SELECT id,name
FROM user
WHERE id IN (:yourListOfIds)如果列表是以用户提供的任何方式提供的,请小心SQL注入。
发布于 2013-01-18 00:16:32
请参阅这个问题,但是如果您查看手册上的评论,您会发现很多人都在谈论爆炸。
发布于 2013-01-18 09:26:34
可以在联接条件中使用MySQL的FIND_IN_SET()函数:
table_a JOIN table_b ON FIND_IN_SET(table_a.id_a, table_b.csv_a)但是(根据我上面的注释中的警告),这个操作效率非常低,因为MySQL必须完全扫描两个表。
一个更好的解决办法是建立一个关系表:
CREATE TABLE relations (
FOREIGN KEY (id_a) REFERENCES table_a (id_a),
FOREIGN KEY (id_b) REFERENCES table_b (id_b)
) SELECT table_a.id_a, table_b.id_b
FROM table_a JOIN table_b
ON FIND_IN_SET(table_a.id_a, table_b.csv_a);
ALTER TABLE table_b DROP csv_a;然后,可以根据需要加入表来查询所需的数据:
SELECT table_a.*
FROM table_a JOIN relations USING (id_a)
WHERE relations.id_b = ?如果愿意,甚至可以使用MySQL的GROUP_CONCAT()函数获得原始的CSV:
SELECT table_b.id_b, GROUP_CONCAT(relations.id_a) AS csv_a
FROM table_b JOIN relations USING (id_b)
WHERE ...
GROUP BY table_b.id_bhttps://stackoverflow.com/questions/14390360
复制相似问题