通过PHP从mysql获取数据,然后对具有相似列值和数量的行进行分组

我基本上有这个程序从数据库中获取订单。我的问题是我需要以这样一种方式编写报告,以便脚本将获得具有相同列值的行,然后对它们进行计数并显示它们。

说表'订单'

salesorder family product
1111111    pi_gx  af000
1111111    pi_gx  af000
1111112    sfng   af111
1111113    pi_gx  af000

将显示在我的PHP页面

sales order   family  qty   product
1111111       pi_gx   2     af000
1111112       sfng    1     af111
1111113       pi_gx   1     af000

它计算所述销售订单的行数并显示数量,同时在我的页面中仅显示该销售订单的单个副本。

代码如下:

<body class="printable">

New Orders Dropped for Product Integration 1X

<table align="center" width="100%">
<tr>
    <td class="labels">Prepared: </td>
<td class="boxed"><?php date_default_timezone_set("Asia/Singapore");$today = date("d/m/y H:i");echo $today; ?></td>
    <td class="divider"> </td>
    <td class="labels">Time Coverage:  </td>
    <td class="boxed">12:00 to 2:00</td>
    <td class="divider"> </td>
    <td class="labels">BirthStamp: </td>
    <td class="boxed">5/21/2012</td>
    <td class="divider"> </td>
    <td class="labels">Saved: </td>
    <td class="boxed"><?php echo $today; ?></td>
</tr>
<tr>
    <td class="labels">Prepared by (Production): </td>
    <td><input type="text" name="preparer" id="preparer" class="boxedPrepared" /></td>
    <td class="divider"></td>
    <td class="labels">Recorded by (Store): </td>
    <td><input type="text" name="recorder" id="recorded" class="boxedPrepared" /></td>
    <td class="divider"></td>
    <td class="labels">Recorded: </td>
    <td class="boxed" colspan="3"><?php echo $today; ?></td>
</tr>
</table>

<?php $conn = mysql_connect("localhost", "root", "123456") or die(mysql_error()); mysql_select_db("store") or die(mysql_error()); $sql = mysql_query("SELECT * FROM report ORDER BY salesorder AND masterproduct ASC") or die(mysql_error()); if(mysql_num_rows($sql) == 0) { echo "
No ORDER/S in Queue
";
} else {
    echo "
    <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" class=\"data\">
              <tr>
                <td class=\"dataHeader\">Sales Order</td>
                <td class=\"dataHeader\">Sales Order Code</td>
                <td class=\"dataHeader\">Family</td>
                <td class=\"dataHeader\">Product Code</td>
                <td class=\"dataHeader\">Quantity</td>
                <td class=\"dataHeader\">Birth Stamp</td>
                <td class=\"dataHeader\">Due Date</td>
              </tr>
    ";
    while($result = mysql_fetch_array($sql)) {
        echo "
              <tr>
                <td class=\"data\">".$result['salesorder']."</td>
                <td class=\"data\">*".$result['salesorder']."*
".$result['salesorder']."</td> <td class=\"data\">".$result['family']."</td> <td class=\"data\">*".$result['masterproduct']."*
".$result['masterproduct']."</td> <td class=\"data\">"; //need to echo the value here echo "</td> <td class=\"data\">".$result['birthstamp']."</td> <td class=\"data\">*".$result['duedate']."*
".$result['duedate']."</td> </tr> "; } echo "</table>"; } ?>
0
额外 编辑
意见: 1
对不起,我不太了解这一点,因为我还是个小菜鸟。我该怎么做?
额外 作者 JudeJitsu,
对不起,仍然无法得到它。你能告诉我我的代码需要做什么吗?我非常感谢帮助。 :(
额外 作者 JudeJitsu,
关系数据库是为了做到这一点而创建的。我建议阅读mysql支持的聚合函数dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
额外 作者 zebediah49,
在这种情况下,我建议阅读mySQL可以对聚合函数,联接和子查询进行的操作。我相信你可以自己找到一些好东西,但是 dev.mysql.com /tech-resources/articles/subqueries_part_1.html tizag.com/mysqlTutorial/mysqljoins。 PHP 应该启动你。
额外 作者 zebediah49,

3 答案

最后算出来了。谢谢你们的帮助。我将我的sql查询更改为:

$sql = mysql_query("SELECT salesorder, masterproduct, family, birthstamp, duedate, COUNT( * ) AS total FROM report WHERE family = '$family' AND birthstamp BETWEEN '$startDT' AND '$endDT' GROUP BY salesorder, masterproduct, family, duedate  ");

它工作得很好!

0
额外
SELECT salesorder, family, product, COUNT() AS qty FROM orders 
       GROUP BY salesorder;

编辑:好的,试试这个尺寸:

SELECT r.*, t.qty FROM report r LEFT JOIN
      (SELECT salesorder, COUNT() AS qty FROM orders 
         GROUP BY salesorder) t
      ON t.salesorder=r.salesorder
    ORDER BY r.salesorder AND r.masterproduct ASC
0
额外
感谢您的快速回复,但是,问题是我需要将其插入另一个查询。请参阅我上面的编辑。
额外 作者 JudeJitsu,
嗨@ zebediah49,对不起,我的编辑很晚了。我基本上需要用上面的代码来做,我在评论中应该写出数量。我也不确定我的第一个问题是否适合这种情况
额外 作者 JudeJitsu,
@ zebediah49,用大小来查询你的查询,显示这个“你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,以便在附近使用正确的语法')AS数量FROM订单GROUP BY salesorder)t ON t.salesorder = r.salesorder ORDER B'在第1行
额外 作者 JudeJitsu,
COUNT()AS qty
额外 作者 flowfree,
嘿,对自己说:“我只是在修复中编辑,然后查看那个评论是”。很好的捕捉,即使我在阅读之前修复它:)
额外 作者 zebediah49,
你可以完全像这样子查询,没问题。 (虽然我看不到编辑)
额外 作者 zebediah49,
啊,我明白了。关系数据库的另一个奇妙功能是: JOIN :D。如果您不熟悉,那将从报表中选择所有内容,然后粘贴从子查询中提取的数量,并使用销售订单身份进行匹配。
额外 作者 zebediah49,

试试这个查询:

SELECT 
 COUNT() AS qty, sales_order, family, products 
FROM orders 
GROUP BY sales_order
0
额外