2016-01-17 60 views
-1

分割字符串中使用MSQL查詢 -使用MSQL查詢拆分字符串?

id  message  mobile        status  
1  hello  9074739352       DELIVERED 
2  hi   9074739352,9074739353    DELIVERED,FAILED 
3  Testing  9074739353       DELIVERED 
4  Sorav  9074739353,9074739354,9074739355 DELIVERED,FAILED,DELIVERED 
5  good  9074739353       DELIVERED 

使用此查詢 - SELECT * FROM send_sms

得到它導致這樣的 -

array(
    [0] => array(
      'id' => 1, 
      'message' => 'hello', 
      'mobile' => '9074739352', 
      'status' => 'DELIVERED' 
      ), 
    [1] => array(
      'id' => 2, 
      'message' => 'hi', 
      'mobile' => '9074739352,9074739353', 
      'status' => 'DELIVERED,FAILED' 
      ), 
    [2] => array(
      'id' => 3, 
      'message' => 'Testing', 
      'mobile' => '9074739353', 
      'status' => 'DELIVERED' 
      ), 
    [3] => array(
      'id' => 4, 
      'message' => 'Sorav', 
      'mobile' => '9074739353,9074739354,9074739355', 
      'status' => 'DELIVERED,FAILED,DELIVERED' 
      ), 
    [4] => array(
      'id' => 5, 
      'message' => 'good', 
      'mobile' => '9074739353', 
      'status' => 'DELIVERED' 
      ) 
) 

,但我想造成這樣的使用MySQL查詢 -

array(
    [0] => array(
      'id' => 1, 
      'message' => 'hello', 
      'mobile' => '9074739352', 
      'status' => 'DELIVERED' 
      ), 
    [1] => array(
      'id' => 2, 
      'message' => 'hi', 
      'mobile' => '9074739352', 
      'status' => 'DELIVERED' 
      ), 
    [2] => array(
      'id' => 2, 
      'message' => 'hi', 
      'mobile' => '9074739353', 
      'status' => 'FAILED' 
      ), 
    [3] => array(
      'id' => 3, 
      'message' => 'Testing', 
      'mobile' => '9074739353', 
      'status' => 'DELIVERED' 
      ), 
    [4] => array(
      'id' => 4, 
      'message' => 'Sorav', 
      'mobile' => '9074739353', 
      'status' => 'DELIVERED' 
      ), 
    [5] => array(
      'id' => 4, 
      'message' => 'Sorav', 
      'mobile' => '9074739354', 
      'status' => 'FAILED' 
      ), 
    [6] => array(
      'id' => 4, 
      'message' => 'Sorav', 
      'mobile' => '9074739355', 
      'status' => 'DELIVERED' 
      ), 
    [7] => array(
      'id' => 5, 
      'message' => 'good', 
      'mobile' => '9074739353', 
      'status' => 'DELIVERED' 
      ) 
) 

我想解決這個問題使用MSQL查詢。

+5

問題是:「爲什麼你在同一領域有多個數據?」 – Toto

+0

可怕的數據庫設計。我建議你開始通過轉換您的數據庫到3NF,然後使用普通查詢,而不試圖找出荒謬的解決方案 – Andrew

回答

0

您可以使用SUBSTRING_INDEX

SELECT 
    id, 
    message, 
    SUBSTRING_INDEX(mobile,',',1) AS mobile, 
    status 
FROM send_sms; 

樣品

MariaDB > select SUBSTRING_INDEX('9074739352,9074739353',',',1); 
+------------------------------------------------+ 
| SUBSTRING_INDEX('9074739352,9074739353',',',1) | 
+------------------------------------------------+ 
| 9074739352          | 
+------------------------------------------------+ 
+0

不正確的答案。 –

+0

你能告訴我我們怎麼做,沒有查詢...我們可以做到這一點使用嵌套的foreach循環? –

+0

我不明白你爲什麼不想使用查詢。將多個數據存儲在一個字段中也不是最好的想法。所以我不能回答這個問題。我不擅長PHP。 –

0

可以使用波紋管查詢所需outout,

select id,message,SUBSTRING_INDEX(mobile,",",1) as mobile,SUBSTRING_INDEX(status,",",1) as status from send_sms 
union select id,message,substring_index(SUBSTRING_INDEX(mobile,",",2),',',-1) as mobile,substring_index(SUBSTRING_INDEX(status,",",2),',',-1) as status from send_sms 
union select id,message,substring_index(SUBSTRING_INDEX(mobile,",",3),',',-1) as mobile,substring_index(SUBSTRING_INDEX(status,",",3),',',-1) as status from send_sms;

但它不是好的實踐ce來創建這樣的數據庫設計。