php - 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 的“图像表”中的关联图像。
我可以查询“项目表”并循环遍历它以再次查询数据库以获取图像。但是我怎样才能在一个数据库调用中做到这一点呢?
解决方案
您可以使用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 端使用。
推荐阅读
- typescript - 如何挑选特定类型的道具?
- angular - 是否可以在 Angular Material 中使用组件作为 mat-grid-tile?
- python - 使用 word[1:2] 而不是 word[1]?
- recursion - 递归函数中的堆栈实现
- octave - 八度最小二乘逼近
- gitlab - 如何在 Markdown 中创建分组任务列表?
- c# - C# 将 Json 转换为具有不同数据类型的重复属性名称的对象
- reporting-services - SSRS 报告表在多列上分组
- datetime - Databricks pySpark 日期时间
- java - 在 ParallelFlux 完成时执行任务而不执行顺序(引入副作用)