ВЫБРАТЬ из нескольких таблиц в отдельных строках - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть функция поиска на моем сайте, где вы можете искать как пользователей, так и местоположения.Я пытаюсь сделать так, чтобы получить все результаты в одном запросе, но он возвращает результаты в одной строке.

SQL

SELECT users.f_name, users.l_name, users.id, locations.name, locations.id
FROM users, locations
WHERE CONCAT(f_name, ' ', l_name) LIKE '%k%' OR name LIKE '%k%';

Однако,это структура, которую она возвращает:

*---------*----------*------*------------*-----*
| f_name  |  l_name  |  id  |    name    | id  |
*---------*----------*------*------------*-----*
|  Joe    |  Smith   |   1  |  Location  |  1  |
*---------*----------*-------------------*-----*
etc.

Я хочу, чтобы она возвращала это:

*---------*----------*------*------------*--------*
| f_name  |  l_name  |  id  |    name    |   id   |
*---------*----------*------*------------*--------*
|  Joe    |  Smith   |   1  |    NULL    |  NULL  |
|  NULL   |   NULL   | NULL |  Location  |    1   |
*---------*----------*------*------------*--------*

Мой единственный другой вариант - сделать два отдельных запроса и объединить результаты.Это кажется неэффективным, и, поскольку он динамически загружается с помощью ajax, я хочу, чтобы это было как можно быстрее.

Какой лучший способ сделать это?

РЕДАКТИРОВАТЬ

Структура таблицы выглядит следующим образом:

users
*---------*----------*------*
| f_name  |  l_name  |  id  |
*---------*----------*------*

locations
*-------*------*
| name  |  id  |
*-------*------*

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

union all должен делать то, что вы хотите:

select u.f_name, u.l_name, u.id, NULL as name, NULL as id
from users u
where CONCAT(f_name, ' ', l_name) like '%k%';
union all
select null, null, null, l.name, l.id
from locations l
where l.name LIKE '%k%';
0 голосов
/ 20 сентября 2018

Не знаю, зачем вам нужны такие данные, но это сделает это за вас в 1 запросе.

При использовании UNION типы данных и имена столбцов должны совпадать в соответствующих столбцах.

SELECT users.f_name, users.l_name, users.id AS UserID, NULL AS name, NULL AS LocationId
FROM users
WHERE CONCAT(f_name, ' ', l_name) LIKE '%k%' 
UNION ALL 
SELECT NULL AS f_name, NULL AS l_name, NULL AS Userid, locations.name, locations.id AS LocationId
FROM locations 
WHERE name LIKE '%k%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...