搜索关键字并应用过滤器

时间:2014-01-20 22:32:01

标签: php mysql

我遇到了一个我无法绕过的问题,而这就是我发布这个问题的原因。还有很多其他的帖子给了我一半的答案,我真的不知道如何完成它。

我有3个表格,其中包含有关广告的信息。一个表格是“ad_names”,另一个是“ad_locations”,最后一个是“ad_details”。

Ad_Names has : ad_title, ad_description, ad_date_added
Ad_Locations has : ad_country, ad_region, ad_city
Ad_Details has : ad_price, ad_author, ad_active

基本上我想为具有特定标题的广告应用位置和详细信息过滤器。

例如,我想在广告标题中搜索“food”关键字,然后应用“仅来自堪萨斯”或“仅来自堪萨斯州+价格高于500美元”的过滤器。我该怎么做?

2 个答案:

答案 0 :(得分:0)

假设Ad是一个具有主键id的表,它是每个其他表(ad_id)中的外键,那么就是这样的:

位置:

SELECT *
FROM Ad A
INNER JOIN Ad_Names N ON N.ad_id = A.id
INNER JOIN Ad_Locations L ON L.ad_id = A.id
INNER JOIN Ad_Details D ON D.ad_id = A.id
WHERE N.ad_title LIKE '%food%' AND L.ad_city = 'Kansas'

价格和位置

SELECT *
FROM Ad A
INNER JOIN Ad_Names N ON N.ad_id = A.id
INNER JOIN Ad_Locations L ON L.ad_id = A.id
INNER JOIN Ad_Details D ON D.ad_id = A.id
WHERE N.ad_title LIKE '%food%' AND L.ad_city = 'Kansas' AND D.ad_price > 500

答案 1 :(得分:0)

首先你需要加入表格。你知道桌子上有外键吗?就像在所有3个表上都有一个Ad_ID字段?如果表很大,您可能还想索引要搜索的字段。一旦掌握了所有数据,您将使用where子句“过滤”它。

http://www.w3schools.com/sql/sql_where.asp

select * from ad_names as A 
join ad_location as L on A.key=L.key 
join ad_details as D on A.key=D.key
where A.ad_title like '%food%' and L.ad_region = 'Kansas' and D.ad_prics > 500;

取决于数据库的设置方式,您可能会在那里获得笛卡尔结果,因此您必须查看您的联接。也许是一个左外连接,在on语句中而不是在where中限制连接。没有更多信息就很难说。

Join types