我一直试图对此进行一段时间的研究,但找不到能够正确解释编码的答案。基本上我有一个mysql表,其中'connections'与用户相关。这些连接用逗号分隔:
connection1,connection2,connection3,connection4等
我需要做的是将每个分成如下数组:
$connection1
$connection2
$connection3
$connection4
然后,对于其中的每一个,我需要能够从不同的表中选择一些信息,例如:
(SELECT name,id FROM users WHERE username = (all of the connections above))
你们有没有让我知道如何做到这一点?谢谢
答案 0 :(得分:1)
您可以使用FIND_IN_SET来执行JOIN,或者您可以对整数表进行连接,并将其与Substring_index一起使用以从CSV字符串中获取值
通常,数据库中以逗号分隔的列表是设计不佳的标志。最好将它们分成另一个表,逗号分隔列表中的每个项目都有一行。
编辑 - 使用整数表的方法示例: -
SELECT name,id
FROM users a
INNER JOIN (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(Connection, ','), ',', aCnt), ',', -1) AS aConnection
FROM Connections
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(Connection) + 1 - LENGTH(REPLACE(Connection, ',', ''))) >= aCnt) Sub2
ON a.username = Sub2.aConnection
这依赖于一个名为整数的表,其中一列名为i,其中10行的值为0到9.您可以将其与自身交叉连接以获得一系列数字。在这种情况下,从0到999,然后受到分割的字段中逗号数量的限制。然后使用该值查找SUBSTRING_INDEX的逗号以分割字符串。
答案 1 :(得分:0)
很简单。使用php的explode
函数。
$text= "connection1, connection2, connection3, connection4";
$res= explode(",",$text);
foreach($res as $i=>$id)
{
echo $res[$i];
}