Я нашел справки по этой теме: Search different column names in different tables in MySQL, но они ссылаются только на два поля в таблице в этой теме, и я не смог создать ответ из моих поисков.поиск двух разных таблиц MySQL с разными полями
EDIT: Я также нашел эту тему: Combine two tables that have no common fields, которая дает немного более полезную информацию, но я до сих пор не в состоянии понять, как совместить эти правильно
Я никогда не имел необходимость создания a JOIN
или UNION
, так что это все для меня совсем ново. Так что простите меня, если есть легкое решение этого.
Мне нужно запустить запрос, который будет искать по двум различным таблицам базы данных, которые имеют совершенно разные поля.
Вот два запроса я пытаюсь объединить в одну:
"SELECT * FROM seekers
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
ORDER BY id DESC"
"SELECT * FROM companies
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
ORDER BY id"
После запроса, я хочу, чтобы все поля в массив и отображать данные соответственно.
Я предполагаю, что основная проблема, с которой я столкнулась, - это решить, как мне следует сочетать таблицы? Я хочу использовать JOIN
(внутренний или внешний) или я хочу использовать UNION
?
Я попытался создать VIEW
, выполнив это: $this->mysqli->query("CREATE VIEW userTable AS (SELECT * FROM seekers) UNION ALL (SELECT * FROM companies)");
, но это не сработало, я предполагаю, потому что в таблицах есть разные поля.
EDIT: После попытки некоторых из приведенных ниже ответов, я пришел с этим запросом:
SELECT first_name, last_name, username, school, major, employer, position, background, interests, skills
FROM seekers
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
UNION ALL
SELECT company_name, username, industry, slogan, location, NULL, NULL, NULL, NULL, NULL
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
я удалил статью ORDER BY
, потому что я получаю сообщение об ошибке говорящее «Неправильное использование UNION и ORDER BY ", поэтому после удаления ORDER BY
я получаю эту ошибку:« Ошибка запроса: у вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «WHERE (имя_компании LIKE»% 0% ') ИЛИ (имя пользователя LIKE'% 0% ') ИЛИ (промышленность LIKE'% 0% ')' по строке 1 "
Почему $q
становится 0 в запросе после объединения?
EDIT # 2: Вот запрос JOIN
, который я собрал, который фактически возвращает данные, но не возвращает правильные данные. Я не знаю, поможет ли это ответить на этот вопрос, но я подумал, что все равно буду здесь.
"SELECT * FROM seekers t1 LEFT JOIN companies t2 ON t1.id = t2.id WHERE (t1.first_name LIKE '%".$q."%') OR (t1.last_name LIKE '%".$q."%') OR (t1.username LIKE '%".$q."%') OR (t1.school LIKE '%".$q."%') OR (t1.major LIKE '%".$q."%') OR (t1.employer LIKE '%".$q."%') OR (t1.position LIKE '%".$q."%') OR (t1.background LIKE '%".$q."%') OR (t1.interests LIKE '%".$q."%') OR (t1.skills LIKE '%".$q."%') OR (t2.company_name LIKE '%".$q."%') OR (t2.username LIKE '%".$q."%') OR (t2.industry LIKE '%".$q."%') OR (t2.slogan LIKE '%".$q."%') OR (t2.location LIKE '%".$q."%')"
извините за форматирование по последнему запросу, SO испортил его при вставке.
может быть, это поможет: http://stackoverflow.com/questions/7407864/mysql-select-union- for-different-columns –