GROUP BY
8 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
SOS, poradí někdo samoukovi? Lze v MySQL dotazu ořezat řetězec v části "GROUP BY"? Potřebuji spočítat, jak často se v tabulce objevuje určitá hodnota vyjádřená jako datum s časem (sloupec DATUM ve formátu "2005-12-22/18:27". To jsem sice pomocí GROUP BY zvládl, ale protože stejných hodnot není mnoho, rád bych seskupoval jen podle hodin, něco jako "2005-12-22/18?", zkrátka aby si to nevšímalo posledních třech znaků. SQL funkce SUBSTR na ořezání řetězce mi v dotazu SELECT nějak nefunguje nebo jí neumím použít... Předem moc dík za radu.
-
Ořízneš to v PHP příkazem: $retezec = substr($cas, 0, 13); ten přečte 13 znaků z proměnné $cas od pozice 0 (1. znak) a uloží je do proměnné $retezec. Čili, jestliže $cas = "2005-12-22/18:27", tak po provedení příkazu máš v $retezec hodnotu "2005-12-22/18"
-
Dodatek: Z databáze je v tomto případě potřeba vyselektovat vše v daném sloupci, pomocí cyklu to pak porovnat a spočítat počet výskytů. Ještě by asi také šlo asi použít následující mysql příkaz: SELECT datum FROM tabulka WHERE (datum>="2005-12-22/18:00" AND datum<"2005-12-22/19:00") nejsem si ale stoprocentně jist, zda mám správně syntaxi
-
Myslím, že tady došlo k několika nepřesnostem. Nejdříve samotná úloha: Zadání: Spočítat počet záznamů v db k danému datumu a času v hodinách. Datum a čas je uložen ve formátu "2005-12-22/18:27". Řešení: Možných řešení je více. Např: SELECT * FROM tabulka WHERE datumcas LIKE "2005-12-22/18%" Důležité je to procento na konci useknutého řetězce. Je to zástupný znak odpovídající * v operačních systémech. nebo SELECT * FROM tabulka WHERE left( datumcas, 13 ) = "2005-12-22/18" Pak už jen v PHP spočítáš počet řádků přes mysql_num_rows(). Vyzkoušej si to v phpMyAdminovi a uvidíš.
-
<B>Díky moc za rady, jen jsem asi neřekl, že nemohu použít podmínku WHERE, protože nechci konkrétní čas, ale počty výskytů v jednotlivých hodinách. Pro představu: v databázi je seznam úkolů s různými daty a já potřebuji zjistit, kolik lidí musím mít v kterou hodinu k dispozici, aby zvládli všechny zadané úkoly.</B> Zatím jsem používal něco jako: $kolik_kon_jindy_datum = mysql_query("SELECT COUNT(id_aktivu) kon_jindy_datum FROM $zdroj_dat WHERE stav='jindy' GROUP BY kon_jindy_datum",$db); while ($kon_jindy_datum = mysql_fetch_array($kolik_kon_jindy_datum, MYSQL_NUM)) { printf("<tr><td>$kon_jindy_datum[0] x</td><td>$kon_jindy_datum[1] </td></tr>", $kon_jindy_datum[0], $kon_jindy_datum[1]); }; Tím jsem získal tabulku... 3 x 2005-12-28/12:59 1 x 2005-12-28/12:12 atd. Raději bych ale.... 4 x 2005-12-28/12___ Napadá vás něco? Ideální by bylo dostat do "GROUP BY" zkráceninu ze sloupce "kon_jindy_datum", ale "left(kon_jindy_datum, 13 )" ani "SUBSTR(kon_jindy_datum,1,13)" mi to nějak nebere. Předem dík:-)
-
Víš, bývá lepší zveřejnit KOMPLETNÍ zadání hned napoprvé. Zkus to takto: SELECT mid( datumcas, 12, 2 ) AS hodina, count( left( datumcas, 10 ) ) AS pocet FROM tabulka WHERE left( datumcas, 10 ) = "2005-11-14" GROUP BY mid( datumcas, 12, 2 )
-
Díky za tip, zdá se, že už to frčí;-)) Ten "mid()" funguje OK, já tam dřív cpal "substr". Ještě jednou dík.
-
Ono by to bylo mnohem jednoduší, kdyby jsi měl datum uloženo jako datum a ne jako řetězec, pak by s tím šlo pracovat pomocí funkcí pro datum a čas a bylo by to o něčem úplně jiném. Takhle je to navíc nechutně pomalé.