【问题标题】:Group mysqli/PDO results by category and display them into groups按类别分组 mysqli/PDO 结果并分组显示
【发布时间】:2016-03-31 16:22:53
【问题描述】:

我正在尝试创建一个从 mysql 表中获取数据的简单库。

我的想法是拥有这样的画廊

Category 1:
Image1         image2      image3 .. so on
Category 2:
Image4         image5 .. so on

我的表结构如下:

Category Table

id   cat_name   status
------------------------
1    Category 1   A
2    Category 2   A

Image Table

id   catID   image   status
----------------------------
1     1       A.jpg   A
2     1       B.jpg   A
3     1       C.jpg   A
4     2       D.jpg   A
5     2       E.jpg   A

我尝试了如下查询:

class Gallery_Photo extends Model {

 public function photosGallery()
 {
    $result = $this->query('SELECT * FROM photos WHERE status = "A" ORDER BY pcID ');
            return $result;
 }
}

但它不起作用。任何想法如何根据需要显示?

【问题讨论】:

  • 这是什么意思??为什么你需要我的 PDO 课程.. 我问了一个基本问题,你在这里粗鲁不是肉
  • 我并不粗鲁。只是您的课程和解释无法理解。发布完整的脚本和课程,我们可能会更好地理解您现在无法理解的问题。
  • 我想这更多是关于一个简单的 mysql 查询,涉及 2 个表和一个 group by 之间的连接。在没有适当的 pdo 准备语句的情况下将它放在扩展类中是纯粹没有意义的,而且完全矫枉过正......
  • 那么你请给出你的解决方案,我会确认
  • 看到 joachim 的回答是关于 mysql 的一个很好的回答。在查询中连接或不连接取决于您。

标签: php mysql mysqli pdo


【解决方案1】:

找到您要查找的内容的最简单方法可能是一个简单的GROUP_CONCAT,它会为您提供一个以逗号分隔的每个类别的图像列表;

SELECT cat_name, GROUP_CONCAT(image ORDER BY image.id) images
FROM category 
JOIN image
  ON category.id = image.catid
GROUP BY category.id

cat_name    images
-----------------------------
Category 1  A.jpg,B.jpg,C.jpg
Category 2  D.jpg,E.jpg

An SQLfiddle to test with.

【讨论】:

  • 我在“字段列表”中得到未知列“图像”
  • @Gags 你的桌子真的叫categoryimage吗?您的示例选择说photos...?
  • 我已将表重命名为仅测试...但它抛出错误
  • @gags 图像名称的字段名称是否像示例中那样称为image?好像是找不到那个字段。
  • 我的坏...我把图像和表名混淆了,想知道我怎么能 GROUP_CONCAT 表:D
【解决方案2】:

基于 GROUP_CONCAT 的解决方案相当难看,因为它需要后期处理,而且 - 最糟糕的是 - 当您不仅需要图像名称,还需要一些其他信息(如尺寸或标题)时,它会变得非常痛苦。

同时,PDO 有一个现成的功能,完全适合您的情况,称为PDO::FETCH_GROUP

你只需要先选择常用字段,剩下的就是难以置信的简单:

$sql = "SELECT cat_name, image FROM category c, image i WHERE c.id = i.catid";
$data = $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP);

您将拥有一个嵌套数组,其中键是类别名称,值是带有图像的数组。所以你只需要两个嵌套循环即可完成任务:

<? foreach($data as $cat_name => $images): ?>
    <?=$cat_name?><br>
    <? foreach($images as $row): ?>
        <img src="<?=$row['image']?>">
    <? endforeach ?>
<? endforeach ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多