PHP MySQL: как получить все изображения, связанные с идентификатором элемента, из таблицы изображений

0

Итак, у меня есть две таблицы.

Таблица элементов:

+---------+-----------+
| item_id | item_name |
+---------+-----------+
|       1 | Item One  |
|       2 | Item Two  |
+---------+-----------+

Таблица изображений:

+---------+----------------------+
| item_id |      item_image      |
+---------+----------------------+
|       1 | clofr9ohuvex5cxeyrfm |
|       1 | slnorjbqfd2x7ks0marp |
|       1 | oomkjtomvasklx9be4sq |
|       2 | um8donrpeuvfrmqb7qt  |
|       2 | lowcvoaijxniiqdj5eoe |
|       2 | qwxfartcsdyusw4lrngi |
+---------+----------------------+

Мой php-код, чтобы получить список элементов со своими ассоциативными изображениями:

$itemsQuery = $db->prepare("
        SELECT *
        FROM items a,item_images b
        WHERE a.item_id = b.item_id
    ");
    $itemsQuery->execute();
    $items = $itemsQuery->fetchAll(PDO::FETCH_ASSOC);

    var_dump($items);

Я получаю 6 результатов вместо 2.

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

Я могу запросить "таблицу элементов" и пропустить его, чтобы запросить базу данных еще раз, чтобы получить изображения. Но как я могу это сделать в одном вызове базы данных?

  • 0
    Поскольку каждый Item_id имеет 3 item_image, вы получаете 6 результатов.
  • 0
    @RavinderReddy Как мне вместо этого получить 2 элемента с их ассоциативными изображениями?
Показать ещё 1 комментарий
Теги:
prepared-statement

1 ответ

0
Лучший ответ

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

SELECT 
    a.*, GROUP_CONCAT(b.item_image) AS item_images
FROM
    items a,item_images b
WHERE
    a.item_id = b.item_id
GROUP BY
    a.item_id

Результат будет ключ под названием item_images, которые содержат каждый item_image для этого item, отделенного ,:

um8donrpeuvfrmqb7qt,lowcvoaijxniiqdj5eoe,qwxfartcsdyusw4lrngi

Затем вы можете использовать explode на стороне PHP, если хотите, чтобы он был как массив.

  • 0
    Это то, что я искал. Спасибо вам, загружает!

Ещё вопросы

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