我有這些表:加入表(MySQL和PHP)
photos (photo_id, photo_title, path)
photos_tags (id, photo_id, tag_id)
tags (tag_id, tag_title).
在我的網頁我顯示照片,其標題和我想要顯示每張照片的標籤,但我不知道怎麼辦。
我想我應該使用LEFT JOIN來連接表格photos_tags和標籤,但我不知道從哪裏開始。任何幫助,將不勝感激!
我有這些表:加入表(MySQL和PHP)
photos (photo_id, photo_title, path)
photos_tags (id, photo_id, tag_id)
tags (tag_id, tag_title).
在我的網頁我顯示照片,其標題和我想要顯示每張照片的標籤,但我不知道怎麼辦。
我想我應該使用LEFT JOIN來連接表格photos_tags和標籤,但我不知道從哪裏開始。任何幫助,將不勝感激!
Select
photos.photo_title,
photos.path,
group_concat(tags.tag_title) as tags
from photos
inner join photos_tags on photos.photo_id = photos_tags.photo_id
inner join tags on tags.tag_id = photos_tags.tag_id
group by photos.photo_id
如果你想獲得沒有標籤的照片,那麼你應該使用左連接。
如果您有很多標籤,或者您希望獲取比標籤名稱更多的數據,那麼您應該準備2個查詢。其次與in
運算符包含照片ID列表。因此,首先獲得所有的照片
select * from photos
然後讓所有的ID,並傳遞給需要左聯接與它們對應的標籤的所有照片第二查詢
select * from tags
inner join photos_tags on photos_tags.tag_id = tags.tag_id
where photos_tags.photo_id in (1,2,3,4)
。明智
SELECT P.*, T.tag_title FROM photos P
LEFT JOIN photos_tags PT ON P.photo_id = PT.photo_id
LEFT JOIN tags T ON T.tag_id = PT.tag_id
在這裏,你得到所有的標籤,照片ID:
做這樣的。
讓我知道進一步的幫助。
假設你有你的照片的證件($ yourPhotoId) 爲特定的照片查詢會是這樣的:
SELECT t.tag_id, t.tag_title
FROM photo_tags pt
LEFT JOIN tags t ON t.tag_id = pt.tag_id
WHERE pt.photo_id = {$yourPhotoId}
,併爲所有的照片(每列):
SELECT *
FROM photos p
LEFT JOIN photo_tags pt ON pt.photo_id = p.photo_id
LEFT JOIN tags t ON t.tag_id = pt.tag_id
特定的照片會是這樣:
//photo_id just example
$photo_id = '1';
SELECT pt.id as id, pt.photo_id as photo_id, pt.tag_id as tag_id, t.tag_title, p.photo_title, p.path FROM photos p
INNER JOIN photo_tags pt ON pt.photo_id = $photo_id
INNER JOIN tags t ON t.tag_id = pt.tag_id
個
所有Phosts:
SELECT pt.id as id, pt.photo_id as photo_id, pt.tag_id as tag_id, t.tag_title, p.photo_title, p.path FROM photos p
INNER JOIN photo_tags pt ON pt.photo_id = p.photo_id
INNER JOIN tags t ON t.tag_id = pt.tag_id
試試這個
SELECT P.*, T.tag_title FROM photos P
JOIN photo_tags PT ON P.photo_id = PT.photo_id
LEFT JOIN tags T ON T.tag_id = PT.tag_id
WHERE t.tag_id = 1
而應用程序應顯示相同的照片2次?我不這麼認爲。 – 2015-01-21 14:26:18
是的,只是因爲在photo_tags表第一張照片有兩個標籤tag_id 1和2以及... – 2015-01-22 04:20:57
我已經更新了答案 – 2015-01-22 04:28:35
這是多對多的關係。沒有分組結果您的查詢將重複照片。 – 2015-01-21 10:29:54