【问题标题】:Trying to group TR rows by a common value尝试按共同值对 TR 行进行分组
【发布时间】:2017-05-09 02:48:52
【问题描述】:

我有“域”。域拥有“电话号码”。我想要做的是将所有数字与其关联的域组合在一起。

关于如何知道一个域何时完成以及另一个域现在在队列中以知道何时结束一个 TR 并开始另一个 TR 以便可以将它们分组到自己的背景颜色方面,我迷失了逻辑或表。

我的代码尝试:

$domainsqlquery = "SELECT DOMAIN FROM phone_numbers WHERE `RESELLER_ID` ='".$RID."'";
    if ($domainresult = mysqli_query($conn, $domainsqlquery)) {
        if (mysqli_num_rows($domainresult) > 0) {
            while ($domainrow = mysqli_fetch_assoc($domainresult)) {
                echo '<tr'.(($c = !$c)?' class="odd"':' class="even"').">";
                $sqlquery = "SELECT * FROM phone_numbers WHERE `RESELLER_ID` ='".$RID."' AND `DOMAIN` ='".$domainrow['DOMAIN']."'";
                if ($result = mysqli_query($conn, $sqlquery)) {
                    if(mysqli_num_rows($result)>0){
                        while ($row = mysqli_fetch_assoc($result)) {
                            echo "<td>";
                            echo "<form action='' method='POST'>";
                            echo "<input name='R_number' value='".$row['NUMBER']."' type='hidden'>";
                            echo "<input name='N_ID' value='".$row['ID']."' type='hidden'>";
                            echo $row['DOMAIN'] ." - ". $row['NUMBER'] ." - Cost: <input name='R_cost' value=".$row['COST']." style='width:50px'> <input type='submit' name='btn-drop' value='X'> &nbsp; <input type='submit' name='btn-update' value='UPDATE'> &nbsp;&nbsp; <a href=\"domain=".$row['DOMAIN']."&caldate=04\" target='_blank'>Open Report</a><br>";
                            echo "</form>";
                            echo "</td>";
                        }
                    }
                }
                echo "</tr>";
            }
        }

【问题讨论】:

  • 什么是($c = !$c)?您没有显示您定义$c 的位置,并且您有赋值运算符=,因此您将$c 设置为!$c
  • 我认为您的 tr 应该在内部循环内。否则,您应该有相同的号码。每个域的电话号码。此外,您不应该在循环内进行查询
  • 您希望每个域有一行,并且该域的所有电话号码作为同一行的列,还是每个电话号码有一行?
  • 每个域都有自己的行,分配给它们的数字也在同一行中。

标签: php html mysql html-table


【解决方案1】:

我建议不要循环访问数据库中的结果并构建 html,而应该循环访问数据库结果以创建结果的字典(多维数组)。我认为您甚至不需要多次查询该表。

为结果创建一个数组:

$results = [];

通过一次查询,您将获得一个包含所有电话号码的数组,每行包含域信息。

然后,遍历这个数组并构建$results 数组。

while ($row = mysqli_fetch_assoc($result)) {
  if (!isset($results[$row['DOMAIN']])) {
    $results[$row['DOMAIN']] = [];
  }

  $results[$row['DOMAIN']][] = $row;
}

这样,你将拥有一个如下形式的多维数组:

[
  'DOMAIN1': [
     [], // row1 
     [], // row2 
   ],
   'DOMAIN2': [
     [],
     [],
   ],
]

您现在可以轻松地循环遍历该数组,其中第一级数组将为您提供该行所在的域。

【讨论】:

  • 谢谢。我终于能够创建正确的 foreach 语句并按照我的需要进行操作。花了一些时间,但我明白了!
猜你喜欢
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多