SQL-запрос многие-ко-многим - PullRequest
       1

SQL-запрос многие-ко-многим

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

Итак, у меня есть 4 таблицы:

автомобили:

+----+-------------+------------------------+
| id |    title    |      description       |
+----+-------------+------------------------+
|  1 | Lorem ipsum | amet coscutor lorem et |
+----+-------------+------------------------+

prducers:

+----+-----------------+-----------------+----------+
| id |      name       |     website     | location |
+----+-----------------+-----------------+----------+
|  1 | Porsche Zentrum | www.example.com | {json}   |
+----+-----------------+-----------------+----------+

vehicle_images:

+------------+----------+
| vehicle_id | image_id |
+------------+----------+
|          1 |        1 |
+------------+----------+

изображения:

+----+-------+-----+----------------------------------+
| id | title | alt |               url                |
+----+-------+-----+----------------------------------+
|  1 | Foo   | Bar | https://example.com/imgs/img.jpg |
+----+-------+-----+----------------------------------+

vehicles имеет отношение многие ко многим с images. В результате мне нужен список всех транспортных средств, сведения о производителе для каждого транспортного средства и все изображения для каждого транспортного средства.

Все, что я сейчас получаю, это список всех автомобилей с соответствующими дилерами, но каждый автомобиль существует так же часто, как и изображения:

+----+-------+---------------+---------+-----------+-----------+
| id | title |  description  | dealer  | img_title |  img_url  |
+----+-------+---------------+---------+-----------+-----------+
|  1 | Car 1 | Description 1 | Porsche | img 1     | img-url-1 |
|  1 | Car 1 | Description 1 | Audi    | img 2     | img-url-2 |
|  2 | Car 2 | Description 2 | Audi    | img 3     | img-url-3 |
|  2 | Car 2 | Description 2 | VW      | img 4     | img-url-4 |
+----+-------+---------------+---------+-----------+-----------+

И, наконец, мой запрос:

SELECT 
v.id, v.title, v.description,
p.name AS dealer,
i.title AS img_title, i.url AS img_url
FROM vehicles v
LEFT JOIN producers p on p.id = v.producer_id
LEFT JOIN vehicle_images vi on vi.vehicle_id = v.id
LEFT JOIN images i ON vi.image_id = i.id;

Я не могу использовать GROUP BY id из-за следующего сообщения об ошибке:

Код ошибки: 1055. Выражение № 9 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец «projektarbeit.i.title», который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by

Конечно, я мог бы деактивировать only_full_group_by в своих настройках MySQL, но я думаю, что это не лучшее решение.

1 Ответ

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

Вы можете использовать подзапрос для получения необходимого результата, например:

SELECT vehicles.id,
       vehicles.title,
       vehicles.description,
       producers.name AS dealer,
       images.title AS img_title,
       images.url AS img_url
FROM vehicles
LEFT JOIN images ON images.image_id =
  (SELECT MAX(image_id)
   FROM vehicle_images WHERE vehicle_id = vehicles.id)
LEFT JOIN producers ON producers.id = vehicles.producer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...