2012-01-03 49 views
1

我想從我的數據庫中獲取一些與您在超市購買的收據類似的數據(只是一個適合我實際情況的例子)。 例如,您將獲得2個(始終只有2個)產品1和3.這些產品存儲在獨立的產品數據庫中。 您的購物結果存儲在一個數據庫中,其中包含所有詳細信息,如時間,地點等等以及2列(product_1和product_2)。同樣,這種購物情況只是與我的實際情況進行比較,所以我知道這對於購物清單來說不是一個好的數據庫結構。MYSQL查詢問題 - 將產品詳細信息加入結果

所以,現在我想獲得整個收據,而不是打印產品ID,我想要的名稱,例如它的價格。

如果我只有一個產品,我會用這個查詢:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 

但因爲我有兩個產品我不能只是去與

AND `list`.`product_2` = `prod`.`prod_id` 

但是你如何achive我會喜歡有嗎?

非常感謝你, 菲爾

回答

0

你需要加入到產品表兩次

例如

SELECT 
     `list`.`time`, 
     `list`.`location`, 
     `prod1`.`prod_name` `prod_name1`, 
     `prod1`.`prod_price` `prod_price1` , 
     `prod2`.`prod_name` `prod_name2`, 
     `prod2`.`prod_price` `prod_price2` 
FROM `shopping_list` `list` 
    INNER JOIN `products` `prod1` 
    ON `list`.`product_1` = `prod1`.`prod_id`  
     INNER JOIN `products` `prod2` 
    ON `list`.`product_2` = `prod2`.`prod_id` 

我不知道你的業務規則,所以你可能需要第二INNER JOIN到LEFT JOIN轉換,如果他們需要總是選擇兩個產品。

+0

我想我只是我自己(這正是我在這個問題的方式做,但有做過類似的事情FROM表兩次,像你做prod1和prod2所以沒有聯合,但與WHERE)。所以這幾乎解決了這個問題,但是當我使用php獲取結果到一個數組時,我有prod_name,所以兩次索引。任何解決方案,我可以將它們標記爲prod_name1和prod_name2,或者我可以如何處理這種情況......非常感謝! :) – Phil 2012-01-03 18:35:26

+1

您可以使用列別名。它們的工作方式與表別名相同。我已經更新了答案以反映這一點。 – 2012-01-03 18:37:43

+0

哇。很高興知道:)非常感謝。我認爲這現在解決了我所有的問題。總是很高興知道您使用的技術具有哪些功能。 – Phil 2012-01-03 18:42:58

0

我不知道您的確切情況,但通常像product_1和product_2這樣的字段名稱表示數據庫設計不正確。但是,如果您確實需要您需要兩次加入產品表。

select 
* 
from 
list l 
, product p1 
, product p2 
where 
    l.product_1 = p1.product_id 
    and l.product_2 = p2.product_id 

(這是oracle語法,但我認爲它也可以在mysql中使用)。

hth。

+0

是的,正如我上面提到的,我不會將它用於產品列表或類似的東西。在我的情況下,這是一個體育賽事(包括時間,聯賽,受歡迎程度等),prod1是主隊和客隊,他們都存儲在一個「俱樂部」表中,並提供更詳細的信息。我認爲這樣的結構更合理或? – Phil 2012-01-03 18:37:47

+0

是的,我同意,對於像這樣的結構是完全沒錯:) – 2012-01-05 11:02:36

0

如果能從1個數據庫結果行中解析出兩行,以前的答案很好。如果你想從數據庫中兩行,你可以做一個UNION查詢:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 
UNION 
SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_2` = `prod`.`prod_id` 
+0

我的一個朋友告訴我,我應該只使用UNION,但沒有時間更詳細地解釋它。非常感謝你的榜樣!我不確定你使用哪種方式會產生差異。 – Phil 2012-01-03 18:39:12

相關問題