2011-03-22 179 views
4

我有這個圖,它應該說明我的情況我需要參加3個表,我不知道該怎麼做這種事情一定的幫助:加入3個三個表

enter image description here

所以我可以去通過這樣做檢索記錄的while循環:

<img src="<?php echo $row['filename']; ?>" alt="" /> 

Album: <?php echo $row['album_name']; ?> 
AlbumID: <?php echo $row['album_id']; ?> 
+0

你要求的SQL語法或建議在加入是否是正確的操作,還是什麼? – Pops 2011-03-22 19:34:05

+0

SQL語法很有用,因爲我可以一次連接兩個表。但是3是我做不到的。對於重申我的問題的人來說,這不是功課。 – MacMac 2011-03-22 19:36:26

回答

6

使用INNER JOIN將防止返回沒有圖像的相冊。 ORDER BY ... DESC將按降序對結果進行排序,但我不確定如何僅返回最後一條記錄。這可能需要某種ORDER BY,GROUP BYTOP的組合。

SELECT 
    album_table.album_id, 
    album_table.album_name, 
    images_table.filename 
FROM album_table 
INNER JOIN images_table ON images_table.album_id = album_table.album_id 
WHERE album_table.user_id = uid 
ORDER BY images_table.date DESC 
+0

@markus:我的意思是寫INNER JOIN! (編輯來解決這個問題)。即使沒有關聯的圖像,LEFT JOIN也可以用於返回相冊。 – 2011-03-22 19:45:29

+0

這是我正在查找的SQL語法。謝謝! – MacMac 2011-03-22 19:45:33

+0

@lolwut:如果你找出只返回**最後一張**圖片的語法,請告訴我們。 – 2011-03-22 19:47:18

0

我相信一個INNER JOIN是你在找什麼

本網站GIV ES一個很好的例子

http://www.w3schools.com/sql/sql_join_inner.asp

+0

堆棧溢出的許多人不喜歡w3schools,我發現了困難的方式。 – 2011-03-22 19:36:19

+0

是的,我知道。然而,對於許多簡單的事情來說,這不是一個很好的來源,它提供了易於閱讀的例子 我認爲w3schools最大的問題是它已經過時了HTML/CSS部分,而不是MySQL頁面。 – 2011-03-22 19:39:47

0

@lolwut:嘗試 -

SELECT 
    album_table.album_id, album_table.album_name, images_table.filename 
FROM album_table 
    INNER JOIN images_table ON images_table.album_id = album_table.album_id 
    INNER JOIN users_table ON users_table.uid = album_table.user_id 
WHERE (users_table.uid = ' . $uid . ') 
ORDER BY images_table.date DESC 

$uid應在當前登錄的用戶的會話...或者你可以留下WHERE條款進行完全,如果你想返回所有用戶的信息。

0

實際上,在這種情況下,您只需要連接兩個表格(作爲一般的經驗法則,您所做的聯接越少越好)。

由於您知道用戶ID,因此您可以直接查詢相冊表名稱。

如果您的users_table碰巧有另一列「user_name」,並且您想搜索該列,那麼您需要加入到users表中。

SELECT filename, album_name, album_id 
FROM album_table at, images_table it 
AND at.album_id = it.album_id 
AND at.user_id = $user_id 
+0

爲什麼你在沒有顯式連接的情況下編寫你的查詢? – markus 2011-03-22 19:46:25