Autor Zpráva
SkyVessel
Profil
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
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
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
hmm... řešení není zas tak složité, jak to v zadání zní :D. Fajn vychytávka.
Díky
Joker
Profil
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
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
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
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
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
...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?

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: