MYSQL SELECT 具有左连接限制 1
MYSQL SELECT WITH LEFT JOIN LIMIT 1
我有一个问题:
我想 select 所有 user1 或 user2 是特定用户 ID 的聊天室。 (SELECT * FROM babble WHERE user1 = '$user' OR user2 = '$user'
)
但我还想获取 babble_messages 的最后一个条目,其中 babble ID 等于 babble_id。
我的数据库结构:
Table babble:
ID | user1 | user2 | created
Table babble_messages:
ID | sender | babble_id | created | seen | message
我的尝试是:
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 table 输出空条目。我认为发生这种情况是因为我 select 在子查询中只是 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"。
我怎样才能 select 只是 babble_messages 的最后一个条目?
当然我可以使用多个请求,但我只想发出一个请求,因为它更快。
我希望这些信息足够了。 :D
感谢阅读并希望能回答 :)
hadome 祝你有愉快的一天
如果用户数量很大,这可能会有点慢,尤其是在有 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
尝试在您的 mysql 查询中使用 table 实例,例如 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
希望对您有所帮助。
我有一个问题:
我想 select 所有 user1 或 user2 是特定用户 ID 的聊天室。 (SELECT * FROM babble WHERE user1 = '$user' OR user2 = '$user'
)
但我还想获取 babble_messages 的最后一个条目,其中 babble ID 等于 babble_id。
我的数据库结构:
Table babble:
ID | user1 | user2 | createdTable babble_messages:
ID | sender | babble_id | created | seen | message
我的尝试是:
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 table 输出空条目。我认为发生这种情况是因为我 select 在子查询中只是 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"。 我怎样才能 select 只是 babble_messages 的最后一个条目?
当然我可以使用多个请求,但我只想发出一个请求,因为它更快。
我希望这些信息足够了。 :D 感谢阅读并希望能回答 :)
hadome 祝你有愉快的一天
如果用户数量很大,这可能会有点慢,尤其是在有 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
尝试在您的 mysql 查询中使用 table 实例,例如 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
希望对您有所帮助。