我遇到了一个我无法绕过的问题,而这就是我发布这个问题的原因。还有很多其他的帖子给了我一半的答案,我真的不知道如何完成它。
我有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美元”的过滤器。我该怎么做?
答案 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中限制连接。没有更多信息就很难说。