【问题标题】:How to place values inside table cell according to combination of table header and first row value?如何根据表格标题和第一行值的组合在表格单元格中放置值?
【发布时间】:2016-05-08 17:18:47
【问题描述】:

下面是我的mysql表结构,里面的值不固定,管理员可以修改。

town_name | product_name| pending_quantity
------------------------------------------
 Jaipur   | Mobile      | 5
 Jaipur   | Charger     | 3
 Surat    | wallet      | 2
 Surat    | Mobile      | 1
 Surat    | battery     | 3
 Surat    | cover       | 2

在我的 php 代码中,我将所有这些值存储在 3 个不同的数组中(每列一个),一切都很好。我想在 HTML 表格中显示这些数据,但它需要显示的结构对我来说是个问题。下面是预期的 HTML 表格结构。

town_name | Mobile | charger | wallet | Battery | cover
-------------------------------------------------------
 Jaipur   | 5      | 3       |        |         |     
 Surat    | 1      |         |  2     |  3      | 2

到目前为止,我已经实现了以应有的方式显示行和列标题。但我现在无法将待处理的数量值放在它的位置。

如果有任何帮助,这是我的 php 代码

<tbody>
                    <?php
                        $count = 1;
                        $row=0;
                        foreach($townid as $townKey=>$townValue) {
                            echo "<tr>";
                            echo "<td>$count</td>";
                            echo "<td>$townValue</td>";
                            foreach($items as $productKey=>$productValue) {
                                echo "<td>$pendingqty[$townKey]</td>";  
                                $row++;
                            }
                            $row++;
                            echo "</tr>";
                            $count++;
                        }
                    ?>
                </tbody>

列标题(手机、充电器等)是动态的,城镇名称也是动态的。请帮助我通过 mysql 或 html 实现所需的结果。

在数组中获取值的 PHP 代码

$townid2 = array();
$itemname = array();
$pendingqty = array();
$items = array();
    
    $query = mysql_query("select o.town_id as townid, od.item_name as itemname, sum(od.pending_qnty) as pendingqty FROM tbl_order o JOIN tbl_order_data od on o.id = od.order_id where month(o.order_date)='1' GROUP BY o.town_id, od.item_name  ");
    while($row = mysql_fetch_array($query)) {
        $townid2[]=$row['townid'];
        $pendingqty[] = $row['pendingqty'];
        $items[] = $row['itemname']; 
    }
    
    $townid = array_unique($townid2, SORT_REGULAR); 

$query2 = mysql_query("select od.item_name FROM tbl_order_data od JOIN tbl_order o on o.id=od.order_id where od.order_id IN (select id from tbl_order where month(order_date)='1') group by od.item_name order by o.item_name ");
    $productArray = array();
    while($row2 = mysql_fetch_array($query2)) { 
        $productArray[] = $row2['item_name'];
    }

【问题讨论】:

  • 是否会出现数据库中有重复行的情况?例如两行分别是斋浦尔、充电器、数量?
  • 查看生成数组的代码也会很有用
  • 理查德,你的第一个问题的答案是否定的。因为我需要显示特定产品的特定城镇的待处理数量的总和。
  • 获取数组中的值的代码,它只是带有组函数和求和函数的mysql查询。我也在编辑我的问题以插入 php 代码。

标签: php html mysql arrays


【解决方案1】:

我会这样做(我正在使用 mysql_query,因为你这样做了,但它已被弃用,所以你真的应该切换):

$things = array();
$columns = array('Mobile','charger','wallet','Battery','cover'); //this can/should be populated dynamically using a distinct product query, but I'm hard-coding it because I'm lazy
$query = mysql_query("select o.town_id as townid, od.item_name as itemname, sum(od.pending_qnty) as pendingqty FROM tbl_order o JOIN tbl_order_data od on o.id = od.order_id where month(o.order_date)='1' GROUP BY o.town_id, od.item_name");
while($row = mysql_fetch_array($query)) {
    $things[$row['townid']][$row['itemname']] = $row['pendingqty'];
}

... //whatever code until you're ready for the table

echo "<table><thead><tr>";
foreach($columns as $column){
    echo "<th>".$column."</th>";
}
echo "</tr><thead><tbody>";
foreach($things as $key=>$value){
    echo "<tr><td>".$key."</td>";
    foreach($columns as $column){
        echo "<td>".(isset($value[$column]) ? $value[$column] : null)."</td>";
    }
    echo "</tr>";
}
echo"</tbody></table>";

【讨论】:

  • 谢谢理查德。我正在尝试这段代码。如果它有效,将发表评论并希望它有效。非常感谢。
  • 刚刚意识到这行不通。给我一秒钟更新(这就是我在看电影时尝试编码的结果!)。
  • 太棒了。它的工作方式就像我想要的那样。你刚刚救了我,伙计。你是英雄!!!非常感谢理查德。
  • 没问题。只需输入查询以获取 $column 数组的所有不同产品名称,然后切换到使用 mysqli 或 PDO 对象,您应该一切顺利。
【解决方案2】:

这是我的看法

$itemnames = array();
$pendingqtys = array();

$query = mysql_query("SELECT 
    od.item_name AS itemname
FROM
    tbl_order o
JOIN
    tbl_order_data od ON o.id = od.order_id
WHERE
    MONTH(o.order_date) = '1'
GROUP BY o.town_id");
while($row = mysql_fetch_array($query)) {
    $itemnames[] = $row['itemname'];
}

$query = null;
$query = mysql_query("SELECT  
    o.town_id AS townid, 
    od.item_name AS itemname, 
    SUM(od.pending_qnty) AS pendingqty 
FROM 
    tbl_order o 
        JOIN 
    tbl_order_data od ON o.id = od.order_id 
WHERE
    MONTH(o.order_date) = '1' 
GROUP BY o.town_id , od.item_name");
while($row = mysql_fetch_array($query)){
    $pendingqtys[$row['townid']][$row['itemname']]=$row['pendingqty'];
}

然后显示结果

echo "<table><thead><tr><th>Town Names</th>";
    foreach($itemnames as $itemname){
        echo "<th>".$itemname."</th>";
    }
echo "</tr></thead><tbody>";
    foreach ($pendingqtys as $town => $pendingqty){
        echo "<tr><th>".$town."</th>";
        foreach ($itemnames as $itemname){
            echo "<td>".$pendingqty[$itemname]."</td>";
        }
        echo "</tr>";
    }
echo "</tbody></table>";

【讨论】:

  • 谢谢,试试看:)
  • 刚刚注意到一个错字$pendingqtys[$row['town_name']][$row['product_name']]=$row['pending_quantity']; 应该是$pendingqtys[$row['townid']][$row['itemname']]=$row['pendingqty'];
猜你喜欢
  • 2012-07-28
  • 2023-03-24
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多