2011-09-02 66 views
0

你好社區,MySQL的左再次加入幫助

我張貼的問題,只需要一個多小時前,詢問一些幫助固定一個SQL查詢時,很快得到了迴應,是一個很大的幫助。可悲的是,經過反思和進一步的使用,事實證明,查詢返回了目標表中的所有行。我通過將mysql_fetch_object放在while循環中進行驗證。

所以我現在非常需要的是有人看看SQL查詢,並告訴我什麼是錯誤的,如果可能的話,如何解決它。我只需要在使用$ _SESSION ['model']作爲參考時找到一行(正確的行)。

下面是我以前的問題的全部內容。

預先感謝您。

============================================== ==============================

web_quote_models表

id | model  | product_id | cpu_id | ram_id | hdd_id | os_id | opt_id 
========================================================================= 
1 | 000001  | 1   | 1  | 1  | 1  | 1  | 1 
2 | 000002  | 1   | 2  | 2  | 2  | 2  | 2 
3 | 000003  | 1   | 3  | 3  | 3  | 3  | 3 
4 | 000004  | 1   | 4  | 4  | 4  | 4  | 4 

web_quote_component_cpu表

id | name 
========================================================================== 
1 | Intel® Core™ i3 2100 3.1GHz dual-core 
2 | Intel® Core™ i5 2500 2.7GHz quad-core 
3 | Intel® Core%trade; i7 2600 3.4GHz 8mb Cache dual-core 

所以我需要實現的是一個查詢,它將查看web_quote_models表的內部並將模型字段與$ _SESSION ['model']匹配,然後將web_quote_models.cpu_id字段與我們匹配b_quote_component.id。

這是我到目前爲止;我想我不能離得太遠。

(" 
SELECT web_quote_component_cpu.name 
FROM web_quote_component_cpu 
LEFT JOIN web_quote_models 
ON web_quote_component_cpu.id=web_quote_models.cpu_id 
AND web_quote_models.name='".$_SESSION['model']."' 
"); 

大量提前感謝任何人的幫助。

丹。

+1

它不應該是:AND web_quote_models。 ** model ** ='「。$ _ SESSION ['model']。''' – Shahbaz

回答

1

隨着Left Join,你即使它們不與其他表格匹配,也可以從join(即web_quote_component_cpu)左側的表格中找到條目。如果您想要只匹配的條目,請使用join而不是left join

那是你在問什麼?

+0

謝謝,剛試過把'LEFT'拿出來,那就起了一種魅力,那也很完美,謝謝你的解釋。這無疑幫助我更好地理解命令。 – zealisreal

+1

沒問題。爲了將來的參考,簡單的'join'被稱爲'inner join'。你也有'外部連接',就像我提到的那樣工作。即使不匹配,「left outer join」或簡單地「left join」也包含左表中的所有內容。 'right join'與右表和'outer join'在兩個表中都是一樣的。 – Shahbaz

+0

非常感謝解釋芽。 – zealisreal

1

SELECT web_quote_component_cpu.name FROM web_quote_component_cpu JOIN web_quote_models ON web_quote_component_cpu.id = web_quote_models.cpu_id WHERE web_quote_models.model = $ _SESSION [產品型號]

(或類似的東西)

+0

感謝您抽出寶貴時間回答問題並展示準確的查詢來完成這項工作。 – zealisreal

+1

不用擔心,MySQL連接語句可能是它最棘手但有用的方面之一。接受的答案詳細說明了差異,但http://en.wikipedia.org/wiki/Join_%28SQL%29有不同類型和效果的信息。 –

+0

謝謝你的鏈接,也很方便。 – zealisreal

0

試試這個:

SELECT web_quote_component_cpu.name 
    FROM web_quote_component_cpu 
    LEFT JOIN web_quote_models ON web_quote_component_cpu.id=web_quote_models.cpu_id 
    WHERE web_quote_models.name='".$_SESSION['model']."' LIMIT 1 
+0

不幸的是,如其他響應中所述,使用LEFT JOIN將獲得web_quote_component_cpu表中的所有行,而不管$ _SESSION ['model']的值如何,因此將回調限制爲1只會回撥第一行。那麼這就是我所確定的。 – zealisreal