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é.