2010-10-17 29 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

相关问题