我有一个用户数据库,他们可以向其他用户发送消息(最多四个),他们发送的消息的ID在他们的用户行中.
Name | Email | Msg1 | Msg2 | Msg3 | Msg4
--------+-------------+------+------+------+-----
Pez | me@me.com | 1 | 55 | 42 | 5
Steve | fake@me.com | 0 | 0 | 0 | 0
Leon | josh@me.com | 3 | 0 | 3 | 5
如何在MySQL查询中获取非空或不等于0的消息行的数量,允许我按顺序排序?所以它会回来
Pez | 4 Mesasges
Leon | 3 Messages
Steve | 0 Messages
我的想法是这样的:
order by count(!empty(msg1)+!empty(msg2)+!empty(msg3)+!empty(msg4))
解决方法:
使用normalized tables可以很简单
SELECT Count(*) FROM messages WHERE userid=47
但是使用你的架构尝试类似的东西
SELECT
name,
(msg1<>0) + (msg2<>0) + (msg3<>0) + (msg4<>0) as cmessages
FROM
foo
编辑:vincent Ramdhanie使用if()的答案不依赖于MysqL的行为,将0作为假,使用1作为比较的结果.我希望如此.