首页 > 解决方案 > PHP MySQL:如何从图像表中检索与项目 ID 关联的所有图像

问题描述

所以我有两张桌子。

物品表:

+---------+-----------+
| 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 个。

我想要的是显示“项目表”中存在的 2 个项目及其基于 item_id 的“图像表”中的关联图像。

我可以查询“项目表”并循环遍历它以再次查询数据库以获取图像。但是我怎样才能在一个数据库调用中做到这一点呢?

标签: phpmysqlprepared-statement

解决方案


您可以使用GROUP_CONCATMySQL 将第二个表中的所有值分组到一个列中:

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 端使用。


推荐阅读