获取行数和回声

时间:2019-02-14 22:25:31

标签: php mysql mysqli

我有一个MySQL表,该表共有10行,其中的5行的状态设置为1,其他的状态设置为0。我想要实现的是显示总计数的最简单方法状态设置为数字1的行。

<?php echo (empty( $this->fetchData[2][0]['pickup_status'] ) ? 'No New Pickups' : $this->fetchData[2][0]['pickup_status'] ); ?>

上面的代码应该显示“ 5”而不是“ No New Pickups”,我该如何做?如果状态不是数字1,我​​仍然希望显示“没有新收件”。

HTML代码

<div class='dashicon'>

            <a href='<?php echo _URL_PATH; ?>packages/pickups'>
            <span class="notify-badge">PHP ECHO</span>
                <img src='<?php echo _URL_PATH . IMGS_PATH; ?>bicon_pickups.png' />
            </a>
        </div>

        <div class='dashname'>
            Pickup Requests
        </div>

        <div class='dashdesc'>
            Manage package pickup request details
        </div>

    </div>

<?php

$result=mysqli_query("SELECT * FROM sysPickupRequest WHERE pickup_status = 1");
$data=mysqli_fetch_assoc($result);
echo $data['total'];

?>

1 个答案:

答案 0 :(得分:2)

您的查询无法满足您的要求。

 SELECT * FROM sysPickupRequest WHERE pickup_status = 1;

这将返回详细信息(可能有很多行,也可能没有行)。它返回的是任何东西的计数。您想要这样的东西。它返回一行和一列,即您需要的计数。

 SELECT COUNT(*) status1 FROM sysPickupRequest WHERE pickup_status = 1;

或者如果您想要总行数和状态为1的数字,则可以执行以下操作:

 SELECT SUM(pickup_status = 1) AS status1, COUNT(*) AS total FROM sysPickupRequest;

之所以起作用,是因为表达式pickup_status = 1的值为true时为1,值为false时为0。您SUM()一堆零和一。

因此,在您的情况下,它的工作原理如下。 (我尚未调试此代码。)

$query = "SELECT SUM(pickup_status = 1) AS status1, COUNT(*) AS total FROM sysPickupRequest;"
$status1 = 0;
if ($resultSet=mysqli->query($query)) {
     if ($row=$resultSet->fetch_assoc($resultSet)) {
         $status1 = $row['status1'];
     } else die 'fetch error';
} else die 'query error';
$pickupStatus = $status1 != 0 ? $status1 :  'No New Pickups';
echo $pickupStatus;