0

我想计算 mysql 中有多少特定字段集的字段为空,我找到了一些示例,但它们都遍历了整个表。

基本上我有8个领域,

Listing_photo_1 到 listing_photo_8,我想知道它们中有多少被填充。

我试过:

$result=mysql_query("SELECT count(*) as total from listings 
                       WHERE listing_photo_1 IS NOT NULL AND 
                             listing_photo_2 IS NOT NULL AND 
                             listing_photo_3 IS NOT NULL AND 
                             listing_photo_4 IS NOT NULL AND 
                             listing_photo_5 IS NOT NULL AND 
                             listing_photo_6 IS NOT NULL AND 
                             listing_photo_7 IS NOT NULL AND 
                             listing_photo_8 IS NOT NULL AND 
                             pmpid = '$pmpid'");

$data=mysql_fetch_assoc($result);
echo $data['total'];

结果是:1

为了澄清我期望的结果:

listing_photo_1:已填充

Listing_photo_2:已填充

Listing_photo_3:已填充

Listing_photo_4:空的

Listing_photo_5:空的

清单_照片_6:空

Listing_photo_7:空的

Listing_photo_8:空`

结果应该是3

4

2 回答 2

1
WHERE listing_photo_1 IS NOT NULL AND listing_photo_2 IS NOT NULL....

编辑:

如果您需要获取每列的单个非空计数,您可以这样做

SELECT count(listing_photo_1),count(listing_photo_2),....count(listing_photo_8) 
from listings where pmpid = id

Count(column)只会计算非空值。

于 2013-09-07T15:50:55.650 回答
1

您的代码尝试计算所有字段不为空的行数。您应该使用is not null而不仅仅是not null.

要计算字段数,请使用以下命令:

SELECT sum((listing_photo_1 IS NOT NULL) +
           (listing_photo_2 IS NOT NULL) +
           (listing_photo_3 IS NOT NULL) +
           (listing_photo_4 IS NOT NULL) +
           (listing_photo_5 IS NOT NULL) +
           (listing_photo_6 IS NOT NULL) +
           (listing_photo_7 IS NOT NULL) +
           (listing_photo_8 IS NOT NULL)
          ) as total
from listings
WHERE pmpid = '$pmpid';

要计算行数:

SELECT count(*) as total
from listings
WHERE listing_photo_1 IS NOT NULL AND
      listing_photo_2 IS NOT NULL AND 
      listing_photo_3 IS NOT NULL AND 
      listing_photo_4 IS NOT NULL AND 
      listing_photo_5 IS NOT NULL AND 
      listing_photo_6 IS NOT NULL AND 
      listing_photo_7 IS NOT NULL AND 
      listing_photo_8 IS NOT NULL AND 
      pmpid = '$pmpid'";

编辑:

如果它们是空白的,请使用如下逻辑:

SELECT sum((listing_photo_1 IS NOT NULL and listing_photo_1 <> '') +
           (listing_photo_2 IS NOT NULL and listing_photo_2 <> '') +
           (listing_photo_3 IS NOT NULL and listing_photo_3 <> '') +
           (listing_photo_4 IS NOT NULL and listing_photo_4 <> '') +
           (listing_photo_5 IS NOT NULL and listing_photo_5 <> '') +
           (listing_photo_6 IS NOT NULL and listing_photo_6 <> '') +
           (listing_photo_7 IS NOT NULL and listing_photo_7 <> '') +
           (listing_photo_8 IS NOT NULL and listing_photo_8 <> '')
          ) as total
from listings
WHERE pmpid = '$pmpid';
于 2013-09-07T15:53:54.640 回答