2012-08-05 36 views
0

所以這裏是例子: 我有一個數據庫與「藝術家」和「繪畫」。我需要創建一個包含藝術家信息的頁面(我從URL獲取藝術家ID)以及與該藝術家相關的每幅畫作,我都將這兩個表格鏈接起來。MySQL SELECT語句:多個項目和所有者信息

有沒有辦法只用1條語句來完成該請求?

我嘗試這樣做:

SELECT * 
FROM artiste, toile 
WHERE artiste_id = {$id} AND 
     fk_artiste_id = artiste_id 

它的工作原理,但因爲我使用了一段時間來獲取數據,我得到3倍的藝術家的信息(因爲不存在與該藝術家相關的3所畫),如果我做了GROUP BY artiste_id,我只能得到1位藝術家,這是第一幅畫,不是全部。

謝謝你的時間! (請原諒我可憐的英語)。

回答

2

如果您只需要關於繪畫的信息,則只能查詢該表上的信息。

SELECT 
    toile.* 
FROM 
    artiste, toile 
WHERE 
    artiste.artiste_id = {$id} AND 
    toile.fk_artiste_id = artiste.artiste_id 

我很抱歉,如果這不是完全的MySQL兼容,我一直在使用MS SQL大多是最近。

編輯:另一種方法是使用INNER JOIN。同樣,如果要是我錯了,確切的語法有人可以糾正,這裏是它應該是什麼樣子:

SELECT 
    toile.* 
FROM 
    toile INNER JOIN artiste ON artiste.artiste_id = toile.fk_artiste_id 
WHERE 
    artiste.artiste_id = {$id} 

兩個部分需要在單獨的查詢。如果您願意,您需要爲每個要檢索的數據集或需要查詢的每個問題提供一個查詢。如果問題是「我擁有關於藝術家X的數據是什麼?」那麼你應該回答這個問題。如果你的問題是「我擁有哪些圖像是藝術家X的繪畫?」那麼這是另一個問題,應該處理另一個查詢。

http://sqlfiddle.com/#!3/47ff0/2

+0

我只需要繪畫的圖片(這是考試修訂版)。 因此,在我做了

的同時,每個
包含關於藝術家的信息,並且在最後的中,我想要與藝術家相關的所有繪畫圖像。 – user1576827 2012-08-05 02:21:10

+0

是的,查詢將完成第二部分。第一部分需要在單獨的查詢中。如果您願意,您需要爲每個要檢索的數據集或需要查詢的每個問題提供一個查詢。如果問題是「我擁有關於藝術家X的數據是什麼?」那麼你應該回答這個問題。如果你的問題是「我擁有哪些圖像是藝術家X的繪畫?」那麼這是另一個問題,應該處理另一個查詢。 – ApplePie 2012-08-05 02:24:52

4

你所得到的結果是actualy安靜正常。您實際上是從指定的藝術家中提取所有繪畫,並將藝術家的信息添加到每幅繪畫中。你可以考慮做兩個查詢,一個用於藝術家信息,一個用於繪畫。或者您可以保留您的查詢,並確保您在循環之前輸出藝術家信息,然後在循環內輸出繪畫信息,並跳過附加到其中的藝術家信息。

1

只要做兩個查詢。

使用SQL,信息以表格形式返回,因此您無法在單個查詢中獲得藝術家及其繪畫的所有副本。

此外,我注意到您使用{$ id},並且標籤說PHP,因此我必須推薦prepared statements來幫助您的應用程序的安全性和可維護性。不要亂用SQL Injection漏洞(和錯誤)。

獲得大量的藝術家副本實際上可能會更快,但這純粹是性能優化。如果你擔心表現,我最好的建議是不要擔心表現。