Объединение запросов, UNION

233
23 февраля 2018, 19:10

Добрый день. Есть 2 sql запроса:

$sql = mysql_query("SELECT * FROM tratingsumm INNER JOIN iezl2_users ON `tratingsumm`.`ID_Driver` = `iezl2_users`.`id` INNER JOIN trating ON `tratingsumm`.`ID_RatingSumm` = `trating`.`ID_Driver`  WHERE `trating`.`ID_Pass`='".$iddr."' ORDER BY `tratingsumm`.`ID_RatingSumm` ") or die (mysql_error());
$sql2 = mysql_query("SELECT * FROM tratingsumm INNER JOIN iezl2_users ON `tratingsumm`.`ID_Driver` = `iezl2_users`.`id` WHERE NOT EXISTS (SELECT * FROM trating WHERE `trating`.`ID_Driver` = `tratingsumm`.`ID_RatingSumm` AND `trating`.`ID_Pass` = '".$iddr."') ORDER BY `tratingsumm`.`ID_RatingSumm`") or die (mysql_error());

При попытки объединения их через оператор UNION, пропадает подсветка синтаксиса и выдается ошибка. По отдельности каждый из запросов работает корректно. Пример - первый запрос выдает данные с id 1 и 3, второй с id 2 и 4, и идет поочередный вывод результатов запросов в порядке 1, 3, 2, 4. А объединение мне нужно, чтобы сделать общий ORDER BY на результаты объединенного запроса и добиться вывода 1, 2, 3, 4. Возможно ли их вообще объединить таким способом?

Answer 1

Изобрести вы ясно пытаетесь left join вот такого вида:

SELECT * FROM tratingsumm 
INNER JOIN iezl2_users ON `tratingsumm`.`ID_Driver` = `iezl2_users`.`id` 
left join trating ON `trating`.`ID_Driver` = `tratingsumm`.`ID_RatingSumm` 
        AND `trating`.`ID_Pass` = '".$iddr."'
ORDER BY `tratingsumm`.`ID_RatingSumm`

union же (или куда вероятнее подразумевался union all) собрать тоже можно. Необходимо учитывать, чтобы все элементы результата были совместимой структуру - у вас из-за дополнительного join в первом запросе select * явно выдаёт разное число полей. И второй момент с сортировкой - её необходимо указать так, чтобы парсер понял, что сортировать надо результат union, а не последний запрос. В общем виде так:

(select ...)
union all
(select ...)
order by ...
READ ALSO
Как подключать файлы к проекту,после сборки с помощью webpack, если в названии прописывается hash?

Как подключать файлы к проекту,после сборки с помощью webpack, если в названии прописывается hash?

Задача при каждой сборки бандлов с помощью webpack, дописывать в названия бандлов со стилями и js хэшСобственно говоря, сделать это не сложно

235
Nginx добавить header к запросу до отправки его в php-fpm

Nginx добавить header к запросу до отправки его в php-fpm

Цель: установить Cookies до того, как запрос будет отправлен в php-fpm

201
Число из переменной

Число из переменной

На сайте WP есть такая функция, которая вставляет код (рекламу) после определенного абзаца в теле статьи

291
Установить config heroku через PHP

Установить config heroku через PHP

Kак установить config heroku через PHPЯ знаю что можно сделать это через командную строку вот так: heroku config:set GITHUB_USERNAME=joesmith

278