【问题标题】:group mysql rows and print data with PHP使用 PHP 对 mysql 行进行分组并打印数据
【发布时间】:2017-04-01 01:37:41
【问题描述】:

假设我有 10 行,其中 5 行具有相同的 id,另外 5 行具有另一个相同的 id。

id ---------name

55 -------- name1
55 -------- name2
55 -------- name3 
66 -------- name6
66 -------- name7
55 -------- name4
66 -------- name8
66 -------- name9
66 -------- name10
55 -------- name5

我想选择这 10 行并按相同的 ID 分组。所以我将有 2 个组,我想打印第 1 组的所有数据,然后打印第 2 组的所有数据。

结果是这样的:

  • group1(name1,name2,name3,name4,name5)

  • group2(name6,name7,name8,name9,name10)

    这怎么可能?

提前谢谢...

【问题讨论】:

  • 首先:如果多个数据集相同的ID,你的数据库有问题。第二:到目前为止,您自己尝试过什么?第三:你查过MySQL manual吗?
  • @FranzGleichmann 对信息不足的大胆断言
  • @Strawberry 具有重复值的实际主键列肯定 是一个很大的错误,任何简单命名为id 的外键而不是,例如tablename_id 是名字很糟糕充其量。所以,无论哪种方式,都有些不对劲。
  • @FranzGleichmann 具有重复值的实际主键列在术语上是矛盾的。我同意命名政策 - 但是(某些警告除外)在 (id,name) 上形成的 PK 并没有太大问题。

标签: php mysql select pdo


【解决方案1】:

PDO 为您提供了许多精彩的获取模式。我设法将它们全部编译在文章中,您可以从中了解到PDO already group the data 立即查询:

$sql = "select id, name from table";
$data = $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN);

现在您有了一个数组,其中键是 id,值是带有名称的数组。这是一个最简单的示例,尽管您可以根据需要格式化输出

foreach ($data as $id => $names) {
    echo "$id (".implode(",", $names).")";
}

此解决方案比基于 SQL 的解决方案更灵活。假设你想把每个名字放在一个不同的表格单元格中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多