我有一个问题:
我想选择user1或user2是特定用户ID的所有babble-room。 (SELECT * FROM babble WHERE user1 = '$user' OR user2 = '$user'
)
但我也希望得到babble_messages的最后一个条目,其中babble ID等于babble_id。
我的数据库结构:
表 babble :
ID | user1 | user2 |创建表 babble_messages :
ID |发件人| babble_id |创建|看到了|消息
我的尝试是:
SELECT
*
FROM
babble
LEFT JOIN (
SELECT
babble_messages.ID AS last_id,
babble_messages.sender AS last_sender,
babble_messages.babble_id,
babble_messages.created AS last_created,
babble_messages.seen AS last_seen,
babble_messages.message AS last_message
FROM
babble_messages
ORDER BY
created DESC LIMIT 1
) babble_messages ON
babble.ID = babble_messages.babble_id
WHERE
user1 = '$user' OR user2 = '$user'
ORDER BY
last_created DESC
这将输出LEFT JOIN表的空条目。我认为这是因为我在子查询中选择了babble_messages的最后一个条目... 我试图在子查询中添加一个WHERE标记,但是会抛出错误:
SELECT
*
FROM
babble
LEFT JOIN (
SELECT
babble_messages.ID AS last_id,
babble_messages.sender AS last_sender,
babble_messages.babble_id,
babble_messages.created AS last_created,
babble_messages.seen AS last_seen,
babble_messages.message AS last_message
FROM
babble_messages
WHERE
babble.ID = babble_messages.babble_id*
ORDER BY
created DESC
LIMIT
1
) babble_messages ON
babble.ID = babble_messages.babble_id
WHERE
user1 = '$user' OR user2 = '$user'
ORDER BY
last_created DESC
在子查询中,mysql不知道“babble.ID”。 如何选择babble_messages的最后一个条目?
当然我可以使用多个请求,但我想只提出一个请求,因为它更快。
我希望这是足够的信息。 :d 感谢阅读并希望回答:)
度过美好的一天
答案 0 :(得分:0)
如果用户数量很大,这可能会有点慢,尤其是那里的OR。
SELECT
ID
,user1
,user2
,created
,last_id
,last_sender
,babble_id
,last_created
,last_seen
,last_message
FROM
(
SELECT
ID
,user1
,user2
,created
,(SELECT ID FROM babble_messages WHERE babble_ID = user1 ORDER BY created DESC LIMIT 1) AS babble_message_id
FROM babble
WHERE user1 = 1
) a
LEFT JOIN (
SELECT
ID last_id
,sender last_sender
,babble_id
,created last_created
,seen last_seen
,message last_message
FROM babble_messages
) b ON a.babble_message_id = b.last_id
ORDER BY last_created DESC
答案 1 :(得分:0)
尝试在mysql查询中使用表格实例,例如 babble b 和 babble_message bm
SELECT
b.*
FROM
babble b
LEFT JOIN (
SELECT
bm.ID AS last_id,
bm.sender AS last_sender,
bm.babble_id,
bm.created AS last_created,
bm.seen AS last_seen,
bm.message AS last_message
FROM
babble_messages bm
WHERE
b.ID = bm.babble_id
ORDER BY
created DESC
LIMIT
1
) bm ON
b.ID = bm.babble_id
WHERE
user1 = '$user' OR user2 = '$user'
ORDER BY
last_created DESC
我希望这可能对你有所帮助。