【问题标题】:MySQL and PHP : How to arrange data from below exampleMySQL 和 PHP:如何从下面的示例中排列数据
【发布时间】:2014-03-12 09:48:40
【问题描述】:

MySQL 代码如下,

该表在 MySQL 数据库中

其实,

唯一项目组 ID 有 3(分别为 101、102 和 103) 项目组 ID 共有 23 个,分别是

101 =10,

102=5

103=8

总计 = 23

每个组 ID(10 或 5 或 8)总数除以唯一组 (3)。

round(10/3) = 3,round(5/3) = 2 和 round(8/3)=3

在输出中,首先 101 将依次出现 3 次,然后 102 依次出现 2 次和 102 依次出现 3 次,再次保持上述比例仍然打印所有数据。

输出将如下图所示

请任何帮助使用 MySQL 或 PHP 代码给出答案,

$result = mysqli_query($con,"SELECT * FROM `item` order by(item_group_id)");

echo "<table><tr><th>ITEM GROUP ID</th><th>ITEM NAME</th></tr>";
while($row = mysqli_fetch_array($result))
{
 ehco "<tr><td>";
 echo $row['item_group_id'] 
 echo "</td><td>";
 echo $row['item_name'];

 echo "</td></tr>";
}
echo "</table>";

SQLFiddle

【问题讨论】:

  • 您可以用您的数据制作一个 sqlfiddle,或者发布纯文本而不是图像,以便我们可以剪切并粘贴到 fiddle 中吗?
  • 好吧,我在做@Barmar
  • 我把它做成了 sqlfiddle。请帮助我@Barmar
  • 小提琴的网址是什么?

标签: php mysql


【解决方案1】:

首先制作一个二维数组,其中第一维是商品组ID,第二维是商品名称:

$data = array();
while ($row = mysqli_fetch_array($result)) {
    $group_id = $row['item_group_id'];
    if (isset($data[$group_id])) {
        $data[$group_id]['names'][] = $row['item_name'];
        $data[$group_id]['count']++;
    } else {
        $data[$group_id] = array('names' => array($row['item_name']), 'count' => 1);
    }
}

然后分组处理每个子数组,直到处理完所有内容:

$divisor = count($data);
while (!empty($data)) {
    foreach ($data as $group_id => &$subarray) {
        $group_size = max(round($subarray['count']/$divisor), 1);
        $group = array_splice($subarray['names'], 0, $group_size);
        foreach ($group as $name) {
            echo "<tr><td>$group_id</td><td>$name</td></tr>";
        }
        if (empty($subarray['names'])) {
            unset($data[$group_id]);
        }
    }
}

DEMO

【讨论】:

  • $data[$group_id]['names'][] = $row['item_name'];上面的行见错误致命错误:[] 运算符不支持字符串
  • 糟糕,没有正确初始化该元素。固定。
  • 如果不存在则创建表 item (item_id int(11) NOT NULL AUTO_INCREMENT, item_name varchar(201) 默认 NULL, item_group_id int(11) NOT NULL, 主键(item_id) ) ENGINE=InnoDB 默认字符集=latin1 AUTO_INCREMENT=24 ;
  • (1, '项目名称 01', 101), (2, '项目名称 02', 101), (3, '项目名称 03', 101), (4, '项目名称04', 101), (5, '项目名称 05', 101), (6, '项目名称 06', 102), (7, '项目名称 07', 102), (8, '项目名称 08' , 101), (9, '项目名称 09', 101), (10, '项目名称 10', 101), (11, '项目名称 11', 103), (12, '项目名称 12', 102 ), (13, '项目名称 13', 103), (14, '项目名称 14', 102), (15, '项目名称 15', 102), (16, '项目名称 16', 103), (17, '项目名称 17', 103), (18, '项目名称 18', 103), (19, '项目名称 19', 103), (20, '项目名称 20', 103), (21 , '项目名称 21', 101), (22, '项目名称 22', 103),
  • 对不起!看不懂
【解决方案2】:
$result = mysqli_query($con,"SELECT DISTINCT item_group_id,item_name  FROM `item` order by(item_group_id)");

echo "<table><tr><th>ITEM GROUP ID</th><th>ITEM NAME</th></tr>";
while($row = mysqli_fetch_array($result))
{
 ehco "<tr><td>";
 echo $row['item_group_id'] 
 echo "</td><td>";
 echo $row['item_name'];

 echo "</td></tr>";
}
echo "</table>";

【讨论】:

  • 请再读一遍这个问题,我认为你不明白这个问题。@chikara
猜你喜欢
  • 2020-11-25
  • 2017-05-13
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
相关资源
最近更新 更多