Neden bu sorgu çalışmıyor?

3 Cevap php

Ben bu sorgu var:

select count(id) AS num,date_id from table
  where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009' order by date_id DESC;

Bu bugünün tarihi yayınlanan tüm id yılında sonuçlanması gerekiyor, ama sadece bir id (yüksek olanı) veriyor. Ben bu sorgudan count(id) kaldırdığınızda, bu iyi çalışır.

Neden bu sayı bu sorgu ile çalışmıyor?

3 Cevap

Sayısı genellikle GROUP BY ile eşleştirilmiş. Denemek mi GROUP BY date_id?

Her ile birlikte tarih için toplam sayısını seçmek istiyorsanız date_id:

SELECT  date_id, num
FROM    (
        SELECT  COUNT(id) AS num
        FROM    table
        WHERE   date_id >= UNIX_TIMESTAMP('17-08-2009')
                AND date_id < UNIX_TIMESTAMP('18-08-2009')
        )
CROSS JOIN
        table
WHERE   date_id >= UNIX_TIMESTAMP('17-08-2009')
        AND date_id < UNIX_TIMESTAMP('18-08-2009')
ORDER BY
        date_id DESC

Eğer sorgu saymak gibi bir toplama işlevi varsa toplanmaz herhangi bir sütun madde ile bir grup belirtilmesi gerekmektedir. Bunun nedeni sizin sorgu haliyle oldukça SQL'ın yürütme semantik ile mantıklı olmamasıdır.

Bu sizin için çalışması gerekir:

select count(id) AS num,date_id
from table
where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009'
group by date_id
order by date_id DESC;

Eğer sadece tek bir tarihe alıyoruz beri sorgu yalnızca zaten bir satır dönecektir beri Ayrıca, size (fıkra ile sipariş gerekmez.