Autor Zpráva
H13
Profil
Ahoj,
potřeboval bych poradit se zobrazením součtu položek - chronologicky pro každý den s tím, že pokud žádný součet položek v daném dni nebude, pak se vypíše datum se součtem 0. Tedy, aby, i když v databázi datum chybí, tak aby se vypisovalo.

Příklad: Položky v databázi, výpis bude podle kritérií od 2014-11-23 do 2014-11-29
ID|IP|Datum
1|100.100.100.100|2014-11-23
2|101.100.100.100|2014-11-23
3|105.100.100.100|2014-11-24
4|106.100.100.100|2014-11-27
5|108.100.100.100|2014-11-29

Výsledek by měl být:
2014-11-23 ... 2
2014-11-24 ... 1
2014-11-25 ... 0
2014-11-26 ... 0
2014-11-27 ... 1
2014-11-28 ... 0
2014-11-29 ... 1

Zkoušel jsem hledat, zkoušel jsem různé varianty, ale nedospěl jsem k správnému řešení, pokud by měl někdo tip nebo odkaz na stránku, kde se řešilo toto nebo něco podobného, byl bych za to rád.

Děkuji.
lionel messi
Profil
SELECT *, COUNT(datum) AS pocet  FROM `tabulka` GROUP BY `datum`
toto je základné riešenie, ale nerieši „pokud žádný součet položek v daném dni nebude, pak se vypíše datum se součtem 0“. Možno by som si uložil všetky dátumy do zvlášť tabuľky a potom urobil outer join, nejako takto:

Prvá tabuľka (ip)

ID|IP|Datum_id
1|100.100.100.100|1
2|101.100.100.1001
3|105.100.100.100|2
4|106.100.100.100|5
5|108.100.100.100|7

Druhá tabuľka (datumy)

ID|Datum
1| 2014-11-23
2| 2014-11-24
3| 2014-11-25
4| 2014-11-26
5| 2014-11-27
6| 2014-11-28
7| 2014-11-29
a dotaz by vyzeral nejako takto:
SELECT *, COUNT(datum) AS pocet FROM ip RIGHT OUTER JOIN datumy d ON datum_id = d.id GROUP BY datum
H13
Profil
Ahoj, díky, tam jde o to, že datum není pevně dané, prostě to může být od 31.7.2013 do 25.2.2014

Prostě pro výpis si určuji filtr: OD a DO - jde vlastně o výpis dnů (chronologicky bez vynechání) a pokud v tom dni jsou nějaké součty, pak je sečíst, pokud den není v databázi, pak má součet nulu.

Teoreticky jsem na to návod našel: vytvořit nějakou proceduru, co vypíše ten interval, uložit do dočasné tabulky a agregovat s tabulkou součtů (vlastně podobně jak to popisuješ).

Teď jde o to, jestli pak není lepší použít např. php a vytvořit nějaké pole dat bez nutnosti dočasné tabulky?
H13
Profil
Tak jen pro info, pokud by to někoho zajímalo - nejlepší mi přišlo použít funkce z PHP (http://php.net/manual/en/book.datetime.php - DatePeriod ) pro výpis dat a tyto výsledky jsem sloučil s výpisem z databáze.
bestik_63
Profil
Já si myslím, že pomocí klasického příkazu SELECT nikdy nedocílíš vypsání něčeho co v databázi není. Budeš si muset vytvořit nějakou funkci, která zjistí datum a pokud nějaký datum chybí, tak připíše záznam. Toto asi docílíš funkcí přímo v SQL, ale i v PHP a výsledek bude stejný. Pokud tedy SQL používáš v kombinaci s PHP, tak bych spíše doporučoval směřovat tímto směrem. Funkce v SQL nejsou zas tak těžké, ale ne každý je umí. Maximálně bys je musel zkusit nastudovat no :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0