2012-02-27 124 views
0

我有一个显示事件列表的网页。默认情况下,所有事件都正在显示。用户可以使用输入字段来过滤该列表。他可以输入city_codecity_namecity_state。在这里我下面的数据库表和它们的内容:PHP MYSQL“高级”JOIN查询

位置

city_code (pk) 
city_name 
city_state 

活动

event_id (pk) 
event_name 
city_code(foreign key) 

我的想法,以达到我想要的是:
1 /过滤器的位置表基于输入值:

(SELECT * FROM locations WHERE city_code LIKE input OR city_name LIKE input or city_state LIKE input). 

2 /在事件表和过滤的位置表之间进行查询JOIN

我的问题是,我知道如何过滤表,我知道如何进行连接查询,但不知道如何使两个“在一起”。我希望有人能帮帮忙。预先感谢您的回复。干杯。马克。

回答

2

您是否尝试过使用两者?你应该发现它的确如你所愿。你正在寻找的语法是以下

SELECT 
    ... 
FROM events 
INNER JOIN locations 
ON locations.city_code = events.city_code 
AND (
    locations.city_code = ... 
    OR 
    locations.city_name = ... 
    OR 
    locations.city_state = ... 
) 

还是略效率较低,但同样有效

SELECT 
    ... 
FROM events 
INNER JOIN locations 
ON locations.city_code = events.city_code 
WHERE (
    locations.city_code = ... 
    OR 
    locations.city_name = ... 
    OR 
    locations.city_state = ... 
) 

不过说真的,你应该给它在这里发帖前一试的。

+0

你好西蒙。感谢您的帮助。我尝试了很少的知识,但没有提供这种语法。再次谢谢你。 – Marc 2012-02-27 10:37:44