2013-03-21 50 views
0

我一直在試圖研究這一段時間,但找不到解決編碼問題的答案。基本上我有一個與用戶相關的'連接'的MySQL表。這些連接用逗號分隔:在PHP中分隔逗號分隔的字詞並選擇額外的信息

連接1,連接2,連接3,連接4等

我需要做的是每一個分離成一個陣列,像這樣:

$connection1 
$connection2 
$connection3 
$connection4 

然後,對於每一種我需要能夠從不同的表中選擇sertain信息,因此,例如:

可以在任何的你讓我叩頭如何做到這一點有可能嗎?謝謝

+3

這是所有非常基本的東西 - 你有沒有試圖自己做任何事情? – 2013-03-21 09:17:44

+1

將字符串與數組分開是在php中使用[explode](http://php.net/manual/en/function.explode.php)完成的。 – 2013-03-21 09:18:14

+0

它基本上是信息的選擇,所有連接部分我卡在 – user2184018 2013-03-21 09:21:30

回答

0

這很簡單。使用php的explode函數。

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

    foreach($res as $i=>$id) 
    { 
     echo $res[$i]; 
    } 
+0

我應該指定我不會確定單元中有多少連接,因爲會定期添加和刪除連接。有沒有辦法讓它自動計算$ res [0],還是需要計算$ res並從那裏做些什麼? – user2184018 2013-03-21 09:25:30

+0

我編輯了我的答案。現在看。 – 2013-03-21 09:31:45

+0

啊,謝謝Renku,這太棒了:) – user2184018 2013-03-21 09:34:34

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的逗號以分割字符串。

+0

+1表示可憐的設計 – 2013-03-21 09:22:42