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

0

Итак, у меня есть 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, но я думаю, что это не лучшее решение.

  • 0
    Вы можете либо отключить only_full_group_by и позволить mysql выбрать случайное значение для вас, либо выбрать значение самостоятельно (например, MAX(v.title) ).
  • 0
    Но если вы хотите получить все изображения из транспортного средства, следует ожидать, что для каждого изображения, имеющегося у транспортного средства, должна быть строка, и каждая строка имеет повторяющиеся данные, такие как идентификатор транспортного средства, название транспортного средства и описание транспортного средства.
Показать ещё 1 комментарий
Теги:
join

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню