2014-09-23 2 views
0

Я реализую очень простую функцию поиска для своей веб-страницы. Существуют задачи с именами таблиц, в которых есть 4 столбца, представляющие интерес: имя, дескрипция, статус (последний - это множественный выбор с тремя возможными вариантами) и имя пользователя.Как реализовать поисковый запрос по двум таблицам?

Так я делаю поиск, как это:

SELECT * FROM tasks WHERE ((description LIKE '%search_val%' OR name LIKE '%search_val%') AND status='selected_status') 

Для всех намерений и целей, это работает. Однако теперь я понял, что хочу, чтобы шаблон поиска, введенный пользователем (приведенное выше предложение выполняется в PHP-коде), также может выполнять поиск в именах столбцов и имени другой таблицы: пользователи таблицы. Если для имени пользователя задана задача (поле, общее для обеих таблиц), то это также результат запроса.

Так скажите, что пользователь вводит Джона в поле поиска. Я хочу показать любые задачи с именем пользователя с пользователем, который имеет имя Джона как имя или имя. И покажи мне какие-либо задачи, содержащие Джона в описании или имени задачи.

Как бы написать запрос для этого?

+1

Пытались ли вы запрос накидной, чтобы получить результаты из обеих таблиц? – Fluffeh

ответ

0

Используйте JOIN для подключения users и tasks таблицы, и объединить два запроса с UNION

SELECT * 
FROM tasks 
WHERE description LIKE '%search_val%' OR name LIKE '%search_val%' 

UNION 

SELECT t.* 
FROM tasks AS t 
JOIN users AS u ON t.username = u.username 
WHERE u.name LIKE '%search_val%' OR u.lastname LIKE '%search_val%' 
+0

Это сработало! Большое спасибо!!! – aarelovich

+0

Я не думаю, что союз необходим. Не удалось ли это сделать, просто присоединившись к таблице пользователей? SELECT t. * FROM tasks AS t JOIN users AS u ON t.username = u.username WHERE u.name LIKE '% search_val%' ИЛИ ​​u.lastname LIKE '% search_val%' ИЛИ ​​t.description LIKE '% search_val% 'ИЛИ t.name LIKE'% search_val% ' – GordonM

+0

Попытаюсь позже. Спасибо за предложение! – aarelovich

Смежные вопросы