我在mysql数据库中有3个表。像组,成员,消息一样。从不同表中选择多行
组
| group_id | group_name | group_image
-------------------------------------------
| group_1 | First Group | group1.jpg
| group_2 | 2nd Group | group2.jpg
| group_3 | 3rd Group | group3.jpg
| group_4 | 4th Group | group4.jpg
| group_5 | 5th Group | group5.jpg
| group_6 | 6th Group | group6.jpg
消息
| sender_id | group_id | message | time
-----------------------------------------
| 001 | group_1 | first message | 2017-07-13 15:05:07
| 002 | group_2 | fifth message | 2017-07-13 15:04:07
| 002 | group_2 | third Message | 2017-07-13 15:03:07
GroupsMembers
| user_id | group_id
-----------------------------------------
| 001 | group_1
| 001 | group_2
| 002 | group_2
| 002 | group_1
| 002 | group_4
| 002 | group_6
我与这个问答尝试uery
SELECT mmbr.group_id, grp.group_name, grp.group_image, msg.time, msg.message FROM `GroupsMembers` AS mmbr JOIN `Messages` AS msg ON msg.group_id =mmbr.group_id AND msg.time = (SELECT MAX(time) FROM `Messages` WHERE group_id = mmbr.group_id) JOIN `Groups` AS grp ON grp.group_id = mmbr.group_id WHERE mmbr.user_id = '002'
它给了我下面的结果: -
| group_id | group_name | group_image | time | message |
------------------------------------------------------------------------
| group_1 | First Group | group1.jpg | 2017-07-13 15:05:07 | first message
| group_2 | 2nd Group | group2.jpg | 2017-07-13 15:04:07 | fifth message
但我需要所有组用户ID的'002'与消息或没有。 东西像这样: -
需要最后发送消息如果任何
| group_id | group_name | group_image | time | message |
------------------------------------------------------------------------
| group_1 | First Group | group1.jpg | 2017-07-13 15:05:07 | first message
| group_2 | 2nd Group | group2.jpg | 2017-07-13 15:04:07 | fifth message
| group_4 | 4th Group | group4.jpg | null | null
| group_6 | 6th Group | group6.jpg | null | null
你试过'LEFT JOIN'吗? – jarlh
还没有。感谢您的建议。让我试试LEFT JOIN,然后我会在这里更新。 –
谢谢@jarlh。 LEFT JOIN起作用。 –