【问题标题】:PHP While loop does not return data in the one rowPHP While循环不返回一行中的数据
【发布时间】:2017-11-27 20:37:45
【问题描述】:

我在使用 while 循环时遇到问题。虽然循环有效,但它不会在一行中返回数据。我知道为什么会这样,但我不知道如何解决它。

$bonusai = mysql_query("SELECT summa, date FROM tb_history WHERE type = 
    'bonus' AND user_id = '$usid' ORDER BY id DESC");

while ($r1 = mysql_fetch_assoc($bonusai)) { ?>
    <tr>
        <td>
            <?php echo ($r1['summa'] == 0.01) ? date('Y-m-d H:i:s', $r1['date']) : ''; ?>
        </td>
        <td colspan="2">
            <?php echo ($r1['summa'] == 0.01) ? '+' : ''; ?>
        </td>
        <td>
            <?php echo ($r1['summa'] == 0.02) ? date('Y-m-d H:i:s', $r1['date']) : ''; ?>
        </td>
        <td colspan="2"><?php echo ($r1['summa'] == 0.02) ? '+' : ''; ?></td>
    </tr>
<?php } ?>

$bonusai查询结果:

在网站上是这样的:

如您所见,该行中只有一个结果。它应该像这样在同一行中显示两个数据(使用检查元素更改):

在我看来,我应该用 if 三元运算符和 while 循环来改变一些东西,或者改变查询结构。也许我应该使用嵌套的while循环?所有数据都在同一个 MySQL 表中,所以我不能使用 JOIN。我应该使用什么来使每条 MySQL 记录在同一行中?

PS 我知道,我不应该使用已弃用的mysql_*

【问题讨论】:

    标签: php html mysql select while-loop


    【解决方案1】:

    您正在尝试为您获取的数据库中的每一行输出 2 行。

            $bonusai = mysql_query("SELECT summa, date FROM tb_history WHERE type = 
                'bonus' AND user_id = '$usid' ORDER BY id DESC");
    
            $leftAdded = false;
            while ($r1 = mysql_fetch_assoc($bonusai)) {
                if ($r1['summa'] == 0.01) {
                   echo '<tr><td>'.date('Y-m-d H:i:s', $r1['date']) .'</td>';
                   $leftAdded = true;
                }
                else {
                    if ( $leftAdded == false ) {
                        echo '<tr><td></td>';
                    }
                    $leftAdded = false;
                    echo '<td>'. date('Y-m-d H:i:s', $r1['date']) .'</td></tr>';
            } 
    }
    

    它的作用是将 tr 标记与第一位以及 /tr 与第二位一起输出。唯一的问题是,如果你没有得到第二个 SQL 位,关闭 tr 标记将丢失,所以如果需要,你可能需要添加代码来捕获它。

    编辑:我添加了代码以防左列尚未添加。

    【讨论】:

    • 感谢您的回答。唯一的问题是 summa 0.01 是 4 行,而 0.02 是 3 行。它应该是 0.01 - 3 行,0.02 - 4 行。此外,第一行只有 1 个结果。最后一行应该包含 1 个结果,而不是第一个。 prntscr.com/fnll53
    • 经过你的编辑,情况好多了,但是为什么第一行是空的(只有1条记录)。最后一行应该有 1 条记录。 prntscr.com/fnlnda
    • 这是因为数据库中记录的顺序,你的第一条记录满足第二个选项。
    • 哦,是的,现在我明白了。此外,不需要第一个 $leftAdded = false;。非常感谢您为帮助我所做的努力! :) +1
    【解决方案2】:

    你可以试试这个:

    $bonusai = mysql_query("SELECT summa, date FROM tb_history WHERE type = 
        'bonus' AND user_id = '$usid' ORDER BY id DESC");
     $i=1;
    while ($r1 = mysql_fetch_assoc($bonusai)) { ?>
        <?php if($i%2 != 0 ){ echo '<tr>'; ?>
            <td>
                <?php echo date('Y-m-d H:i:s', $r1['date']); ?>
            </td>
            <td>+</td>
            <td>
                <?php echo date('Y-m-d H:i:s', $r1['date']); ?>
            </td>
            <td>+</td>
        <?php if($i%2 == 0 ){ echo '</tr>'; ?>
        <?php $i++;
       } ?>
    

    【讨论】:

      【解决方案3】:

      如果有帮助,你可以试试这个代码。

          <?php
              $sel="select * from demo";
              $res=$con->query($sel);
              while($r=$res->fetch_object())
              {
          ?>
          <tr>
              <td><input type="checkbox" name="ch[]" value="<?php echo $r->id; ?>" /></td>
              <td><?php echo $r->id; ?></td>
              <td><?php echo $r->name; ?></td>
              <td><?php echo $r->email ?></td>
              <td><?php echo $r->password; ?></td>
              <td><?php echo $r->gender; ?></td>
              <td><?php echo $r->number ?></td>
              <td><?php echo $r->address?></td>
              <td><?php echo $r->city; ?></td>
              <td><?php echo $r->hobby; ?></td>
              <td><a href="delete.php?did=<?php echo $r->id; ?>">Delete</a></td>
              <td><a href="edit.php?eid=<?php echo $r->id; ?>">Edit</a></td>
          </tr>
          <?php } ?>
      

      【讨论】:

      • 对不起,这不是我需要的。
      猜你喜欢
      • 2011-12-31
      • 2017-11-09
      • 1970-01-01
      • 2017-04-03
      • 2014-10-05
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多