2016-02-13 61 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/) –