我需要一個查詢來獲取我的結果,使用兩個不同的表。輸入爲$tagID
,由$ _GET給出。第一個表coupons_tags具有tagID字段和couponID字段。第二張表,優惠券,有一個couponID的字段,其餘的字段是我想要的信息。使用MySQL編寫複雜查詢的問題
我該如何運行一個查詢,該查詢可以根據我提供的信息查找與$ _GET中的輸入變量匹配的所有優惠券?我使用多個查詢進行了這種半工作,但代碼非常糟糕,因爲我是多表查詢的新手。
我正在使用MySQL和PHP。
我需要一個查詢來獲取我的結果,使用兩個不同的表。輸入爲$tagID
,由$ _GET給出。第一個表coupons_tags具有tagID字段和couponID字段。第二張表,優惠券,有一個couponID的字段,其餘的字段是我想要的信息。使用MySQL編寫複雜查詢的問題
我該如何運行一個查詢,該查詢可以根據我提供的信息查找與$ _GET中的輸入變量匹配的所有優惠券?我使用多個查詢進行了這種半工作,但代碼非常糟糕,因爲我是多表查詢的新手。
我正在使用MySQL和PHP。
這是爲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子句過濾出你不想要的標籤。
雖然解決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.*
,就像我一樣,請記住也要包含表別名。這並不總是必要的,因爲某些列只存在於您正在查詢的其中一個表中,並且數據庫引擎不會混淆找出您所屬的列所屬的表,但這總是一個好習慣附加的別名,因爲它再次提高了腳本的可讀性和可維護性。
顯示帶有標籤和cupons的表的定義 – bensiu 2011-03-09 23:49:22