2011-04-01 50 views
0

我需要幫助w/php查詢,並將開始解釋明顯,我在我的頭上與此。幫助php mysql查詢添加第三個表

該查詢可以工作(非常*),從2個表中隨機選擇具有特定條件的產品。我的問題是我不僅需要現場products.vendorid,但實際供應商名稱它位於另一個表,供應商。因此,products.vid是產品的供應商 - 我需要進入供應商表並查找與之匹配的字段vendor.company。

我不知道如何在這裏介紹這第三張表,主要是查找。我試圖保持在相同的記錄集中,並想知道子查詢是否適用於此處或其他內容? 查詢:

SELECT products.pid, products.vendorid, products.is_visible, 
     product_description.compare1, product_description.title 
FROM products, product_description 
WHERE products.pid >= (SELECT FLOOR(MAX(pid) * RAND()) FROM `products`) 
    and ((product_description.compare1 = 'Cohasset') 
    and (products.is_visible='Yes') and (products.pid = product_description.pid)) 
LIMIT 5 

爲了澄清 - 我需要一個叫做「vendor.company」字段,表中的「供應商」,其中包含供應商ID,叫做「VID」與products.vendorid相匹配。

希望這是有道理的,我很感謝幫助。

*(不是100%:如果產生的隨機數大於總產品較少超過5個,但我能活瓦特/,就目前而言)

回答

1
SELECT products.pid, products.vendorid, products.is_visible, 
     product_description.compare1, product_description.title, 
     vendor.company 
FROM products, product_description, vendor 
WHERE products.pid >= (SELECT FLOOR(MAX(pid) * RAND()) FROM `products`) 
    and ((product_description.compare1 = 'Cohasset') 
    and (products.is_visible='Yes') and (products.pid = product_description.pid)) 
    and vendor.vid = products.vendorid 
LIMIT 5 

要打破下來:

我需要一個叫做「vendor.company」字段,

所以我們添加vendor.company在頂部的SELECT節結束。

表中的 '供應商'

所以我們增加vendorFROM列表

包含供應商ID,叫做 'VID' 與products.vendorid相匹配。

所以我們增加vendor.vid = products.vendoridWHERE

+0

+1正確,很好的解釋。我只會將'WHERE'條件更改爲'JOIN's以加入表格。 – 2011-04-01 23:25:20

+0

我一直都很喜歡加入我自己,但我必須誠實:我不確定實際的區別是什麼(任何人都知道,請加入!)。我假設mysql優化爲某種JOIN,但是如果我知道JOIN是什麼類型的話......在這種情況下,我選擇儘可能保持查詢結構,希望能夠讓OP理解起來簡單。 – 2011-04-01 23:40:54

0

我會用的,而不是JOINWHERE,在可能的情況:

SELECT products.pid 
    , products.vendorid 
    , products.is_visible 
    , product_description.compare1 
    , product_description.title 
    , vendor.company 
FROM products 
    JOIN product_description 
    ON products.pid = product_description.pid 
    JOIN vendor 
    ON vendor.vid = products.vendorid 
WHERE products.pid >= 
     (SELECT FLOOR(MAX(pid) * RAND()) 
      FROM products) 
    and (product_description.compare1 = 'Cohasset') 
    and (products.is_visible = 'Yes') 
LIMIT 5