2012-02-27 3 views
0

У меня есть веб-страница, на которой отображается список событий. По умолчанию отображаются все события. Пользователь может использовать поле ввода для фильтрации этого списка. Он может либо ввести city_code, либо city_name, либо city_state. Здесь ниже моих таблиц БД и их содержание:PHP MYSQL "Advanced" JOIN Query

Locations

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

Hello Simon. Спасибо вам за помощь. Я пытался с моими небольшими знаниями, но не пришел с этим синтаксисом. Еще раз спасибо. – Marc