Autor | Zpráva | ||
---|---|---|---|
SkyVessel Profil |
#1 · Zasláno: 12. 6. 2014, 11:38:42
Zdravím,
mám v tabulce datumy yyyy-mm-dd a potřebuji spočítat, kolikrát se tam vyskytuje jakékoliv datum začínající v aktuálním školním roce, tj od září do srpna... Je na to nějaké čisté řešení? |
||
Petr Ká Profil |
#2 · Zasláno: 12. 6. 2014, 11:49:23
Nejjednodušší řešení:
SELECT COUNT(nazev_slouce_treba_id) AS vyskyty FROM nazev_tabulky WHERE datum BETWEEN 'zacatek_datum' AND 'konec_datum' |
||
SkyVessel Profil |
Petr Ká:
Díky... Vypadá to, že to funguje :). Konečné řešení: $sk_rok = ($dnes->format('n') < 9) ? $dnes->format('Y') - 1 : $dnes->format('Y'); $dotaz = "SELECT COUNT(dokoncen) AS hotovo FROM ob_$szn[cislo_ob] WHERE hotovo BETWEEN '$sk_rok-09-01' AND '".$dnes->format('Y-m-d')."'"; $vysledek = mysql_query ($dotaz) or die(mysql_error()); $hotovo_x = mysql_result($vysledek,0); |
||
Petr Ká Profil |
#4 · Zasláno: 12. 6. 2014, 16:25:24
SkyVessel:
No vidíš a pokud chceš ještě fjůčuru a vybrat POUZE pracovní dny v tomto rozmezí, script bude vypadat takto: $sk_rok = ($dnes->format('n') < 9) ? $dnes->format('Y') - 1 : $dnes->format('Y'); $dotaz = " SELECT COUNT(dokoncen) AS hotovo FROM ob_$szn[cislo_ob] WHERE hotovo BETWEEN '$sk_rok-10-01' AND '".$dnes->format('Y-m-d')."' AND DAYOFWEEK(hotovo) NOT IN(1,7) "; $vysledek = mysql_query ($dotaz) or die(mysql_error()); $hotovo_x = mysql_result($vysledek,0); |
||
SkyVessel Profil |
#5 · Zasláno: 12. 6. 2014, 16:34:57
hmm... řešení není zas tak složité, jak to v zadání zní :D. Fajn vychytávka.
Díky |
||
Joker Profil |
#6 · Zasláno: 12. 6. 2014, 16:47:30
Petr Ká:
„vybrat POUZE pracovní dny v tomto rozmezí, script bude vypadat takto“ Nebo spíše by vypadal, kdyby byly pracovní všechny dny od pondělí do pátku. |
||
Petr Ká Profil |
Joker:
„Nebo spíše by vypadal, kdyby byly pracovní všechny dny od pondělí do pátku.“ Ano, to máš pravdu, na státní svátky bych zavedl tabulku a pomocí subquery a not in exkludoval. Pak by to bylo "dokonalé" |
||
SkyVessel Profil |
#8 · Zasláno: 12. 6. 2014, 16:53:08
Detail... Podstatný xD...
Naštěstí zatím tohle řešení nepotřebuji, ale člověk nikdy neví, kdy se bude hodit. |
||
Petr Ká Profil |
#9 · Zasláno: 12. 6. 2014, 16:53:10
SkyVessel:
Ješte detailněji na to koukám, ty máš pro (asi objednávky podle názvu proměnné) každou hodnotu v poli zvlášť tabulku? Nebylo by lepší přidat sloupec jako identifikátor té asi objednávky do tabulky? |
||
SkyVessel Profil |
#10 · Zasláno: 12. 6. 2014, 20:57:22
No v tomhle případě by to nejspíš bylo lepší. Já mám nekolik objektů (cca 40) a ukládám o nich různé údaje různě se opakující v průběhu roku. proto jsem zvolil radši, aby měl každý objekt svou tabulku. I pro přehlednost a rychlost...
|
||
Joker Profil |
#11 · Zasláno: 12. 6. 2014, 21:41:56
SkyVessel:
„proto jsem zvolil radši, aby měl každý objekt svou tabulku. I pro přehlednost a rychlost...“ To je nejspíš chybné rozhodnutí. Záznamy stejného druhu (se stejnou strukturou) by měly být ve stejné tabulce. Více informací viz Některé časteji řešené dotazy pro MySQL - FAQ » Nová tabulka/sloupec pro každý záznam. Co se týká rychlosti to je přesně naopak, databáze jsou stavěné na velké počty záznamů v tabulkách (a desítky ani tisíce rozhodně nejsou „velké počty“). Naopak vyhledat tabulky s určitým formátem názvu a vybrat z nich záznamy bude složité a pomalé. |
||
SkyVessel Profil |
#12 · Zasláno: 13. 6. 2014, 01:00:52
...takže když mám tabulku s objekty, kde PK je číslo objektu...
OBJEKTY cislo_ob smallint(5) UNSIGNED PK nazev varchar(50) utf8_czech_ci info text utf8_czech_ci NULL ...a poté pro každý objekt vlastní tabulku, do kterých ukládám záznamy (max 10 záznamů za rok na tabulku)... OB_1, OB_2, OB_3... id smallint(5) UNSIGNED AUTO_INCREMENT PK cislo_ob smallint(5) UNSIGNED volny tinyint(1) otevren date NULL dokoncen date NULL správce varchar(30) utf8_czech_ci NULL info text utf8_czech_ci NULL ...tak je to "špatně"? Radši udělat tabulku OB a do té ukládat veškeré záznamy? |
||
Časová prodleva: 10 let
|
0