0

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

连接1、连接2、连接3、连接4等

我需要做的是将每个分隔成一个数组,如下所示:

$connection1
$connection2
$connection3
$connection4

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

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

你们谁能让我知道这怎么可能?谢谢

4

2 回答 2

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

这依赖于一个名为 integers 的表,其中有一列名为 i,有 10 行,值为 0 到 9。您可以将其与自身交叉连接以获得一系列数字。在这种情况下,从 0 到 999,然后受要拆分的字段中的逗号数量限制。然后使用此值查找 SUBSTRING_INDEX 的逗号以拆分字符串。

于 2013-03-21T09:20:02.217 回答
0

很简单。使用explodephp的功能。

   $text= "connection1, connection2, connection3, connection4";
   $res= explode(",",$text);

    foreach($res as $i=>$id)
    {
       echo $res[$i];
    }
于 2013-03-21T09:20:43.867 回答