Подсчитайте непустые поля mysql

Я хочу подсчитать, сколько полей определенного набора полей пуст в mysql, я нашел несколько примеров, но все они проходят через всю таблицу.

В основном у меня есть 8 полей,

listing_photo_1 to 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: пусто

listing_photo_6: пусто

listing_photo_7: пусто

listing_photo_8: empty`

Результат должен быть 3

Related of "Подсчитайте непустые поля mysql"

Вы пытаетесь подсчитать количество строк, где все поля не равны нулю. Вы должны использовать 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'; 
 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) будет считать только значения, отличные от нуля.