【问题标题】:Mysql table getting displayed incorrectlyMysql 表显示不正确
【发布时间】:2014-08-18 11:47:38
【问题描述】:

一个活动(具有唯一的活动ID)有多个活动(具有唯一的活动ID)。对于活动ID,活动ID从1开始并继续,随着活动ID的变化,活动ID再次从1开始。

我想做的是为特定的campaignid创建一个不同的表。

我的代码中现在发生的情况是,对于每个表(对于每个活动 ID),如果我使用 break 1; 则只有第一个活动 ID 的所有活动 ID 会显示在所有表中。如果我不使用 break 1; ,然后所有的活动ID(与所有活动ID相关)都显示在所有表格中。我想要的是第一个活动ID的第一个表中的所有活动ID,第二个活动ID的第二个表中的所有活动ID,依此类推。关于如何实现这一点的任何建议?

MYSQL 列:

餐桌广告系列:

  • 广告系列
  • 活动说明
  • 活动定位
  • numactivities,clientid

餐桌活动活动:

  • 身份证
  • campaignid(取自上表)
  • 活动描述(取自上表)
  • clientid(取自上表)
  • 客户全名
  • 活动ID
  • 活动描述
  • x1
  • x2
  • x3
  • x4
  • x5
  • y1
  • y2
  • y3

PHP:

<div class="table-responsive" >
<?php
       //print the rows
      $q1=mysqli_query($con,"select * from clientusers where Clientemail='".$_SESSION["Email"]."'");
$row1=mysqli_fetch_assoc($q1);
$id1=$row1['Clientid'];

$q2=mysqli_query($con,"select * from campaigns where Clientid='$id1'");
$row2=mysqli_fetch_assoc($q2);
$id2=$row2['Clientid'];

$colNames = array();
$data = array();
 $data[] = $row2;
  while($row2 = mysqli_fetch_assoc($q2))
  {
     $data[] = $row2;
  }
  $data=array_reverse($data);
$colNames = array_keys(reset($data));
$colNames =array($colNames[2],$colNames[6],$colNames[1]);
       foreach($data as $val)
       {  
          echo "<tr>";
          ?><div class="well">
          <?php 

          $q3=mysqli_query($con,"select * from campaignactivities where Clientid='$id2'");
      $row3=mysqli_fetch_assoc($q3);

      $colNames2 = array();
      $data2 = array();
      $data2[] = $row3;
      while($row3 = mysqli_fetch_assoc($q3))
      {
        $data2[] = $row3;
      }

      $colNames2 = array_keys(reset($data2));
      $colNames2 =array($colNames2[5],$colNames2[6],$colNames2[7],$colNames2[8],$colNames2[9],$colNames2[10],$colNames2[11],
                          $colNames2[12],$colNames2[13],$colNames2[14]);

    ?>
  <table class="table table-condensed table-striped table-bordered table-hover no-margin well">


    <tbody>
      <tr>
      <?php 

      $temp=1;
      foreach($data2 as $val2)
       { 
          echo "<tr>";
          if ($temp>(int)$val2[$colNames2[0]]) {$temp=1;break 1;} 
          else {$temp=(int)$val2[$colNames2[0]]; echo "</tr>";};
          foreach($colNames2 as $colName2)
          { 
            echo "<td>".$val2[$colName2]."</td>";
          } 
       }

        ?>
  </tr>

  </tbody>

  </table><?php echo "</div><br>";} ?>
</div>

【问题讨论】:

    标签: php mysql database html-table


    【解决方案1】:

    如果我对您的理解正确,您可以通过单个 SQL 查询返回多组数据。对于每组数据(其中该组中的第一项具有 1 存储在其名称存储在 $colNames2 中的字段中),您需要输出一个单独的 HTML 表。

    通常对于此类问题,您会检查要触发更改的字段,当需要更改时,您会输出一个表的结尾,如果是下一个则输出开始。您输出循环前的第一个起始表和循环后的最后一个结束表。

    您可以使用表的类来执行此操作。在循环之前从类中创建一个新对象,每次组更改时取消设置对象并创建一个新对象,并在循环之后取消设置对象。在类中,在构造函数中输出表的开头,在析构函数中输出表的结尾。像这样的东西:-

    <div class="table-responsive" >
    <?php
           //print the rows
    $q1=mysqli_query($con,"select * from clientusers where Clientemail='".$_SESSION["Email"]."'");
    $row1=mysqli_fetch_assoc($q1);
    $id1=$row1['Clientid'];
    
    $q2=mysqli_query($con,"select * from campaigns where Clientid='$id1'");
    $row2=mysqli_fetch_assoc($q2);
    $id2=$row2['Clientid'];
    
    $colNames = array();
    $data = array();
    $data[] = $row2;
    while($row2 = mysqli_fetch_assoc($q2))
    {
        $data[] = $row2;
    }
    $data=array_reverse($data);
    $colNames = array_keys(reset($data));
    $colNames =array($colNames[2],$colNames[6],$colNames[1]);
    foreach($data as $val)
    {  
        echo "<tr>";
        ?><div class="well">
        <?php 
    
        $q3=mysqli_query($con,"select * from campaignactivities where Clientid='$id2'");
        $row3=mysqli_fetch_assoc($q3);
    
        $colNames2 = array();
        $data2 = array();
        $data2[] = $row3;
        while($row3 = mysqli_fetch_assoc($q3))
        {
            $data2[] = $row3;
        }
    
        $colNames2 = array_keys(reset($data2));
        $colNames2 =array($colNames2[5],$colNames2[6],$colNames2[7],$colNames2[8],$colNames2[9],$colNames2[10],$colNames2[11],
                            $colNames2[12],$colNames2[13],$colNames2[14]);
    
        $aTable = new aTable();
        $temp=1;
    
        foreach($data2 as $val2)
        { 
            if ($temp>(int)$val2[$colNames2[0]]) 
            {
                $temp = 1;
                unset($aTable);
                $aTable = new aTable();
            }
            $aTable->write_line($colNames2, $val2)
        }
    
        unset($aTable);
    
        echo "</div><br>";} 
    
    ?>
    </div>
    
    <?php
    class aTable
    {
        function __construct()
        {
            echo "<table class='table table-condensed table-striped table-bordered table-hover no-margin well'> <tbody>  <tr>";
        }
    
        function __destruct()
        {
            echo "</tr> </tbody> </table>";
        }
    
        function write_line($colNames2, $val2)
        {
            foreach($colNames2 as $colName2)
            { 
                echo "<td>".$val2[$colName2]."</td>";
            } 
        }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2011-10-16
      • 2020-08-15
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多