0

私はしばらくの間これを調べようとしましたが、コーディングを正しく説明する答えを見つけることができません。基本的に、ユーザーに関連する「接続」を持つmysqlテーブルがあります。これらの接続はコンマで区切られます。

connection1、connection2、connection3、connection4など

私がする必要があるのは、それぞれを次のように配列に分割することです。

$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 文字列から値を取得することができます

通常、データベース内のカンマ区切りのリストは、設計が不十分であることを示しています。それらを別のテーブルに分割し、コンマ区切りのリスト内の項目ごとに 1 つの行を作成することをお勧めします。

編集 - 整数のテーブルを使用してそれを行う方法の例:-

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

これは、0 から 9 の値を持つ 10 行を含む、i という単一の列を持つ integers というテーブルに依存しています。これをそれ自体に対してクロス結合して、数値の範囲を取得できます。この場合は 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 に答える