在PHP中分隔逗号破碎的单词并选择额外的信息

时间:2013-03-21 09:15:57

标签: php mysql

我一直试图对此进行一段时间的研究,但找不到能够正确解释编码的答案。基本上我有一个mysql表,其中'connections'与用户相关。这些连接用逗号分隔:

connection1,connection2,connection3,connection4等

我需要做的是将每个分成如下数组:

$connection1
$connection2
$connection3
$connection4

然后,对于其中的每一个,我需要能够从不同的表中选择一些信息,例如:

(SELECT name,id FROM users WHERE username = (all of the connections above))

你们有没有让我知道如何做到这一点?谢谢

2 个答案:

答案 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];
    }