2016-02-13 63 views
-1

這裏是我的表架構MySQL的組記錄

Table Schema for Test Table

在上面的測試表我的user_bymessage_type只有當message_type =「希望將我的記錄push_message「

我想實現它沒有任何子查詢,建議請。

我想這

SELECT * FROM `test` group by (CASE WHEN message_type = 'push_message' THEN user_by ELSE id END); 

但在mysql中拋出一個錯誤。

這是我想要的東西: enter image description here

+0

如果你通過你的user_by和message_type進行分組,那麼你的一些匹配字段將會消失。所以你真的需要這樣做,否則失去這些領域。 –

+1

請製作[sqlfiddle](http://sqlfiddle.com/),以便我們能夠幫助您。 –

+0

你有什麼嘗試?你知道如何進行查詢,但它不起作用嗎?正如@FrayneKonok建議的,你應該提供一個例子。 – Cynical

回答

1

嗨,謝謝你的回答。經過一些更多的研究,我得到了正確的答案。

SELECT id,user_id, user_by,message_type FROM test group by 
if(message_type = 'push_message',concat(user_by,message_type),id); 
0

這裏是GROUP_CONCAT的簡單的例子,你可能會得到你想要的輸出後,運行該/執行此。這個例子還有一個分隔符',',所以你可以快速理解這些事情。

GROUP_CONCAT函數返回一個字符串結果,其中包含組合的非空值。如果沒有非NULL值

SELECT id, user_id, 
    GROUP_CONCAT(DISTINCT user_by ORDER BY user_by DESC SEPARATOR ', ') as user_by 
    FROM test 
WHERE message_type = 'push_message' 
GROUP BY user_by; 

這可能會幫助你,如果沒有,那麼請讓我知道,做一個小提琴瞭解什麼實際發生,它返回NULL!

如果您需要保留其他字段,請爲所有這些做GROUP_CONCAT,否則其他數據將從輸出表中刪除。

+0

這沒有幫助。我編輯了這個問題,讓你清楚我想要的東西。告訴我你是否想要其他東西。 –

+0

你可以請[[sqlfiddle]](http://sqlfiddle.com/) –