2010-10-17 94 views
1

我一直在努力工作,我們有一段時間,但有麻煩。PHP/SQL使用以前的查詢數據來查詢另一個表

我們有4張表,供應商,supplier_areas,supplier_languages和supplier_products選項。

我正在嘗試進行高級搜索,用戶可以使用上述任何一種方法搜索成員。

一個例子搜索可能是在一定區域內說英語&法語,也賣產品1和2

我知道位置表將總是要通過語言第一次查詢,然後所有供應商,然後是產品表,最後是供應商表中的特定字段。

E.g.

所有供應商ID的從supplier_areas其中locationid = 1

這例如返回與supplierids「1」的陣列,「5」,「10」

我然後需要查詢語言表以查找從這些供應商講英語,我可以看到使用的唯一的語句是從supplier_languages

選擇供應商ID WHERE languageid = 1或languageid = 2,供應商ID = 1或供應商ID = 5或供應商ID = 10

然後顯然使用taht的結果來查詢最後兩個表。

我假設我打算做的OR語句太慢並且服務器密集。從第一個查詢返回的結果可以是任何最多200個供應商ID。

任何幫助,將不勝感激。

感謝

回答

3

,你可以將所有查詢到一個:

select * 
from supplier_areas 
join supplier_languages using (supplierid) 
join supplier_products using (supplierid) 
join supplier using (supplierid) 
where 
    supplier_areas.locationid=1 
and supplier_languages.languageid in (1,2) 
and supplier_products.productid in (....) 

正如middus已經說過,需要深入探討的JOIN語句..

+0

這是偉大的,怎麼會在的情況下工作每次都不會查詢某些表格?例如,不搜索產品或供應商表中的字段要求where子句 – lethalMango 2010-10-18 14:05:12

+0

根據要檢索的數據,可以簡單地省略某些表或將其他條件添加到where子句,如'and supplier.name =' mysupplier''。可能性(幾乎)是無止境的:o) – 2010-10-18 14:23:45

+0

謝謝,但你能告訴我,這是否會在動態環境中工作,例如在用戶發起的高級搜索中所描述的動態環境中......所以基本上改變了哪裏字段和值? – lethalMango 2010-10-19 14:22:59

1

你應該看看在你的MySQL語句中使用JOIN

相關問題