PHP While循环不返回一行中的数据

时间:2017-06-24 10:30:08

标签: php html mysql select while-loop

我在使用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查询结果:

enter image description here

在网站上,它看起来像这样:enter image description here

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

enter image description here

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

P.S我知道,我不应该使用已弃用的mysql_*

3 个答案:

答案 0 :(得分:2)

您正在尝试为获取的数据库中的每一行输出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的第二位,那么close tr标签将会丢失,所以如果需要,你可能需要添加代码来捕获它。

编辑:我已经添加了代码,以防左栏未添加。

答案 1 :(得分:0)

如果有用,可以尝试使用此代码。

    <?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 } ?>

答案 2 :(得分:0)

你可以试试这个:

$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++;
   } ?>