2011-03-09 60 views
1

我需要一個查詢來獲取我的結果,使用兩個不同的表。輸入爲$tagID,由$ _GET給出。第一個表coupons_tags具有tagID字段和couponID字段。第二張表,優惠券,有一個couponID的字段,其餘的字段是我想要的信息。使用MySQL編寫複雜查詢的問題

我該如何運行一個查詢,該查詢可以根據我提供的信息查找與$ _GET中的輸入變量匹配的所有優惠券?我使用多個查詢進行了這種半工作,但代碼非常糟糕,因爲我是多表查詢的新手。

我正在使用MySQL和PHP。

+0

顯示帶有標籤和cupons的表的定義 – bensiu 2011-03-09 23:49:22

回答

1

這是爲SQL查詢啓動的。我確定如何在PHP中調用它。

SELECT coupons.something, coupons.somethingelse 
FROM coupons_tags, coupons 
WHERE coupons_tags.coupons_id = coupons.coupons_id 
    AND coupons_tags.tag_id = $tagID 

可以認爲,表把「肩並肩」,使每個水平行有兩個表中同一coupons_id。

第二個where子句過濾出你不想要的標籤。

2

雖然解決JKJ爲您提供了工作,它使用連接表,其中尤其是混合連接條件和過濾條件中有一項條款,即WHERE條款的舊方式。

目前標準的連接方式提供了專用關鍵字,允許您將連接邏輯從過濾器邏輯中分離出來,從而使您的查詢更加清晰,我敢說。

這裏是你將如何根據目前的標準去:

SELECT c.* 
FROM coupons_tags ct 
    INNER JOIN coupons c ON ct.couponID = c.couponID 
WHERE ct.tagID = $tagID 

這裏你指定與INNER JOIN條款的加入和把連接條件ct.couponID = c.couponID,在ON關鍵字後,從而留下過濾條件,ct.tagID = $tagID,在WHERE條款中。

此解決方案還具有表別名(ct,c),當您必須查詢多個表時,這也可以幫助您提高腳本的可讀性。

如果在查詢多個表格時,您指定了某些列來選擇,而不僅僅是*alias.*,就像我一樣,請記住也要包含表別名。這並不總是必要的,因爲某些列只存在於您正在查詢的其中一個表中,並且數據庫引擎不會混淆找出您所屬的列所屬的表,但這總是一個好習慣附加的別名,因爲它再次提高了腳本的可讀性和可維護性。