2009-08-17 32 views
0

Ich habe diese Anfrage:Warum funktioniert diese Abfrage nicht?

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; 

Diese in allen ids führen sollten am heutigen Tag veröffentlicht, aber es ist was nur eine ID (die höchste). Wenn ich count(id) von dieser Abfrage entferne, läuft es gut.

Warum funktioniert diese Anzahl nicht mit dieser Abfrage?

+0

Könnten Sie bitte das Ergebnisset posten, das Sie bekommen wollten? – Quassnoi

Antwort

5

Anzahl wird oft mit GROUP BY gepaart. Haben Sie versucht, GROUP BY date_id?

1

Wenn Sie Gesamtanzahl für das Datum auszuwählen zusammen mit jedem 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 
0

Wenn Sie eine Aggregatfunktion wie COUNT in Ihrer Abfrage alle Spalten, die nicht aggregiert werden, haben in einer Gruppe erwähnt werden, durch Klausel. Der Grund dafür ist, dass es mit der SQL-Ausführungssemantik nicht ganz Sinn macht, wenn Ihre Abfrage steht.

Dies sollte für Sie arbeiten:

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; 

Auch sind, da Sie nur von einem Zeitpunkt bekommen, brauchen Sie nicht den Auftrag durch Klausel (da die Abfrage nur sowieso eine Zeile zurückgeben wird

.
Verwandte Themen