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