Autor Zpráva
Jiricek
Profil
Ahoj :)
Předem se omlouvám za titulek, nevěděl jsem, jak ho co nejlépe napsat :-(

Mám tabulku akce, kde je kromě id, názvu, textu, apod sloupec date_from a date_to ve formatu date.
Takže mám záznam v tbl (třeba nějaká školní akce :-) ) ve sloupcích:
date_from: 2007-09-05
date_to: 2007-09-10

Pak mám nějaký script, který přijímá parametr date (yyyy-mm-dd). Prostě třeba show_actions.php?date=2007-09-06 - a pomocí dotazu vypíšu všechny akce, které tomutu datumu odpovídají:

SELECT * FROM akce WHERE date_from <= $date AND date_to >= $date

Tak pohodička, ale teď mám grafický kalendář (takový ten klasický v tabulce a každý den je odkaz na výše uvedený script). A teď chci, aby se datum, ve kterém probíhá nějaká akce, barevně rozlišilo - a nezáleží mi na tom, jestli je tam jedna nebo deset akcí.

Když by byl sloupec s konkrétním datumem, tak bych mohl použít třeba WHERE month(date) = $mesic .. Jenže když mám sloupce od .. do, tak fakt nevím. Moc moc Vás prosím o radu, nepotřebuji to jen na ten kalendář, ale i na vypsání všech akcí v měsíci.
Díky :)

btw: Buď je to opravdu težký oříšek nebo jsem blbec a něco jsem přehlídnul, protože se s tím lopotím pár dní :-(
Mastodont
Profil
Zjisti si, kolik akcí připadá na daný den a když to bude víc než 0, nastav jinou barvu.

SELECT COUNT(id) * FROM akce WHERE date_from <= $date AND date_to >= $date
Jiricek
Profil
Mastodont: Tohle mě už napadlo ze začátku. Ale připadá mi trošku prasácké dělat takto 30 dotazů :-(
Mastodont
Profil
V tom případě si udělej třeba extra tabulku s jedním sloupcem typu DATE, který bude bude mít unique index, a při každém vložení nové akce do něj vlož všechna data, na která akce připadá. Chyby při vkládání (duplicitní hodnoty) ignoruj a pak ti prostě stačí udělat dotaz do této tabulky za daný měsíc.
Mastodont
Profil
Mmch, u opakovaných akcí se taky někdy používá druhá tabulka pro ukládání samostatných záznamů pro každý den vícedenní akce - umožňuje to například přidat extra informace jen pro určitý den akce. V tom případě je to rovněž jednoduché, stačí jeden dotaz.
Jiricek
Profil
Tohle řešení jsem si nechával pro případ nouze, když nebudu vědět, jak dál. Ale na druhou stranu mě napadá, že se to docela hodí. Protože když budu mít třeba akci od pátku do úterý, můžu tam naklikat dny mimo soboty a neděle (např).

Jen nechápu, proč by sloupec měl být unique. Já tu tabulku chápal nějak takto:


| id | id_akce | datum |
---------------------------------------
| 1 | 23 | 2007-09-05 |
| 2 | 23 | 2007-09-06 |
| 3 | 23 | 2007-09-07 |
| 4 | 26 | 2007-09-06 |
| 5 | 27 | 2007-09-07 |


A ještě jsem se chtěl zeptat ostatních, kteří dělali něco podobného, jestli používají tuto pomocnou tabulku na datumy nebo dělají několikanásobný dotaz :)
Mastodont
Profil
Unique proto, že ti tam každý den stačí jen jednou. Pokud tedy tu tabulku chceš jen pro zjišťování toho, zda připadá nebo nepřipadá na nějaký den akce.

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