Mysql 表在使用join时获取多行
我想从3个表pm_conv、user、photo中获取数据,但在加入第3个表photo后,我得到了多行数据,我尝试分配以获取限制为1的数据,但无法 这是一个问题 试试这个Mysql 表在使用join时获取多行,mysql,Mysql,我想从3个表pm_conv、user、photo中获取数据,但在加入第3个表photo后,我得到了多行数据,我尝试分配以获取限制为1的数据,但无法 这是一个问题 试试这个 SELECT pm_conv. *, user.username, user.id, photo.url FROM pm_conv JOIN user ON CASE WHEN pm_conv.sender_id ='2869' THEN pm_co
SELECT
pm_conv. *, user.username, user.id, photo.url
FROM
pm_conv
JOIN
user ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = user.id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = user.id
END
JOIN
photo ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = photo.user_id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = photo.user_id
END
WHERE
`sender_id`='2869'
OR `recipient_id` ='2869'
ORDER BY
`last_answer_date` DESC limit 1
修改的查询:-
我想它会提供您想要的输出。请尝试子查询,以获得照片表。也许它应该起作用
SELECT
pm_conv. *,
user.username,
user.id,
IF(pm_conv.sender_id ='2869',
(SELECT photo.user_id FROM photo WHERE pm_conv.recipient_id = photo.user_id LIMIT 1 ) ,
IF (pm_conv.recipient_id ='2869',
(SELECT photo.user_id FROM photo WHERE pm_conv.recipient_id = photo.user_id LIMIT 1 ),
'')) as PHOTO_USER
FROM
pm_conv
JOIN
user ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = user.id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = user.id
END
WHERE
`sender_id`='2869'
OR `recipient_id` ='2869'
ORDER BY
`last_answer_date` DESC
你有什么错误吗?你想实现什么?考虑到这是一个对话,并且您的查询意味着您希望获取涉及用户2869的所有消息,您将得到多个结果。我不明白的是,你说即使你使用了极限1,你仍然会得到多个结果?你可能把你的限额放错了1。是的,这是一张基于对话的3号桌。我想分别从这些表中获取conv、username和photo,但photo表给出了多行,因为它有多张照片与一个id,用户当前使用的照片的条件是什么?photo表中是否有其他相关列可以解决此问题?我正在将pm_conv表中的id与photo的user_id列进行匹配,例如id=3562,并且在photo.user_id中有4行与user_id列。感谢您的回答。但是它限制了整个数据我只想限制photo.url好的,你的photo.url在表中有重复的值。是的…因为它有更多的图像urlid@ArslanAli请尝试修改后的查询,它会对您有所帮助。非常感谢您先生:您救了我一天:很高兴为您效劳
SELECT
pm_conv. *, user.username, user.id, photo.url
FROM
pm_conv
JOIN
user ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = user.id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = user.id
END
JOIN ((SELECT `photo`.* FROM `photo` join `pm_conv` as pmc ON CASE
WHEN pmc.sender_id ='2869'
THEN pmc.recipient_id = photo.user_id
WHEN pmc.recipient_id ='2869'
THEN pmc.sender_id = photo.user_id
END limit 1)) as photo
ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = photo.user_id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = photo.user_id
END
WHERE
`sender_id`='2869'
OR `recipient_id` ='2869'
ORDER BY
`last_answer_date` DESC
SELECT
pm_conv. *,
user.username,
user.id,
IF(pm_conv.sender_id ='2869',
(SELECT photo.user_id FROM photo WHERE pm_conv.recipient_id = photo.user_id LIMIT 1 ) ,
IF (pm_conv.recipient_id ='2869',
(SELECT photo.user_id FROM photo WHERE pm_conv.recipient_id = photo.user_id LIMIT 1 ),
'')) as PHOTO_USER
FROM
pm_conv
JOIN
user ON CASE
WHEN pm_conv.sender_id ='2869'
THEN pm_conv.recipient_id = user.id
WHEN pm_conv.recipient_id ='2869'
THEN pm_conv.sender_id = user.id
END
WHERE
`sender_id`='2869'
OR `recipient_id` ='2869'
ORDER BY
`last_answer_date` DESC