Mysql 带标签的海螺
我通过以下查询选择照片、它们的标签和一些基本用户信息:Mysql 带标签的海螺,mysql,inner-join,Mysql,Inner Join,我通过以下查询选择照片、它们的标签和一些基本用户信息: SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags FROM photos INNER JOIN users ON photos.upload_by = users.user_id INNER JOIN tags_photos ON tags_photos.ph
SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags
FROM photos
INNER JOIN users
ON photos.upload_by = users.user_id
INNER JOIN tags_photos
ON tags_photos.photo_id = photos.photo_id
INNER JOIN tags
ON tags.tag_id = tags_photos.tag_id
WHERE photos.status = '$status'
AND photos.photo_id IN (SELECT photos.photo_id
FROM photos
JOIN tags_photos
ON photos.photo_id = tags_photos.photo_id
JOIN tags
ON tags_photos.tag_id = tags.tag_id)
GROUP BY photos.photo_id
ORDER BY status, upload_date;
它工作得很好,唯一的例外是,如果照片没有标签,它不会返回该照片。我希望它仍然返回照片,即使没有标签
有人有什么建议吗?看起来你需要在
标签和照片之间有一个右外连接
SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags FROM photos
INNER JOIN users ON photos.upload_by = users.user_id
RIGHT OUTER JOIN tags_photos ON tags_photos.photo_id = photos.photo_id
INNER JOIN tags ON tags.tag_id = tags_photos.tag_id
WHERE photos.status = '$status' AND photos.photo_id IN (
SELECT photos.photo_id
FROM photos
LEFT OUTER JOIN tags_photos ON photos.photo_id = tags_photos.photo_id
JOIN tags ON tags_photos.tag_id = tags.tag_id
)
GROUP BY photos.photo_id ORDER BY status, upload_date;
看起来您需要在标签\u照片
和照片
SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags FROM photos
INNER JOIN users ON photos.upload_by = users.user_id
RIGHT OUTER JOIN tags_photos ON tags_photos.photo_id = photos.photo_id
INNER JOIN tags ON tags.tag_id = tags_photos.tag_id
WHERE photos.status = '$status' AND photos.photo_id IN (
SELECT photos.photo_id
FROM photos
LEFT OUTER JOIN tags_photos ON photos.photo_id = tags_photos.photo_id
JOIN tags ON tags_photos.tag_id = tags.tag_id
)
GROUP BY photos.photo_id ORDER BY status, upload_date;
不确定为什么需要WHERE子句中的IN子查询
SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags
FROM photos
INNER JOIN users
ON photos.upload_by = users.user_id
LEFT JOIN tags_photos
INNER JOIN tags
ON tags.tag_id = tags_photos.tag_id
ON tags_photos.photo_id = photos.photo_id
WHERE photos.status = '$status'
GROUP BY photos.photo_id
ORDER BY status, upload_date;
不确定为什么需要WHERE子句中的IN子查询
SELECT photos.*, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS photo_tags
FROM photos
INNER JOIN users
ON photos.upload_by = users.user_id
LEFT JOIN tags_photos
INNER JOIN tags
ON tags.tag_id = tags_photos.tag_id
ON tags_photos.photo_id = photos.photo_id
WHERE photos.status = '$status'
GROUP BY photos.photo_id
ORDER BY status, upload_date;
Michael,谢谢你的提示,但不幸的是,这不起作用。@Pete在子查询中添加的另一个左外部联接可能会有所帮助。请参见上文。Michael,谢谢你的提示,但不幸的是,这不起作用。@Pete在子查询中添加的另一个左外部联接可能会有所帮助。见上图。@Pete:很高兴能帮忙。请点击旁边的复选标记,将此答案标记为已接受。@Pete:很高兴为您提供帮助。请单击旁边的复选标记,将此答案标记为已接受。