我有3个表事件,位置,event_location。活动可以有多个位置。 位置表具有lattitude,longitude,hasGeocode字段。
所以对于关键词“hello world”
对事件表的简单查询变为
Select * from event where keywords like '%hello%' OR keywords like '%world%'
但是如果用户输入了他们的位置,那么我也希望在此查询中包含位置表,以便用户可以指定他们选择的位置,我该怎么做?
基本上有3种类型的搜索查询
只是关键字
关键字和位置
我尝试过这样的事情 -
select * from event where keywords like '%hello%' OR
keywords like '%world%' INNER JOIN location ON
location.location_id = event_location.location_id
INNER JOIN
event_location ON event_location.event_id = event.event_id
INNER JOIN表示事件必须有一个或多个位置。如果事件没有任何位置,它将不会出现在搜索结果中。所以请帮帮我,我该怎么做?
谢谢你的帮助。
答案 0 :(得分:2)
你的连接语法都被破坏了。在任何情况下,如果内部连接没有切割它,请使用外部连接。 ; - )
SELECT
*
FROM
event AS e
LEFT JOIN event_location AS el ON el.event_id = e.event_id
LEFT JOIN location AS l ON l.location_id = el.location_id
WHERE
e.keywords LIKE '%hello%'
OR e.keywords LIKE '%world%'
此外,使用表别名绝不是一个坏主意,特别是如果你的表名很长。
答案 1 :(得分:1)
使用LEFT JOIN s(我更改了联接的顺序并修复了where子句位置,这是错位的)
select * from event LEFT JOIN event_location ON
event.event_id = event_location.event_id
LEFT JOIN
location ON event_location.location_id = location.location_id
where keywords like '%hello%' OR
keywords like '%world%'
这样,对于没有位置的事件,你将获得NULL。
另外,尽量不要使用select *,而是命名您感兴趣的列。