Autor | Zpráva | ||
---|---|---|---|
WMPopi Profil |
#1 · Zasláno: 24. 11. 2011, 20:09:01
Ahoj, řeším takový zajímavý problém: mám tabulku akce, kde mám sloupce datum_od a datum_do. Občas se stane, že akce netrvá od-do, ale je jen 1., 3. a 5. Pro tenhle účel mám další tabulku akce_konani (id, akce, datum) a tam se rozepíšou jednotlivé dny.
Ve skriptu potřebuju vypsat každý den, ve který se něco koná, co se koná. Potřebuju dostat takovýhle výsledek: 2011-01-01: Akce jednodenní 2011-01-01: Akce vícedenní 2011-01-01: Akce některé dny 2011-01-02: Akce vícedenní 2011-01-03: Akce vícedenní 2011-01-03: Akce některé dny 2011-01-04: Akce vícedenní 2011-01-05: Akce vícedenní 2011-01-05: Akce některé dny CREATE TABLE IF NOT EXISTS `akce` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nazev` varchar(100) NOT NULL, `typ` enum('jednodenní','vícedenní','různé dny') NOT NULL, `datum_od` date NOT NULL, `datum_do` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; INSERT INTO `akce` (`id`, `nazev`, `typ`, `datum_od`, `datum_do`) VALUES (1, 'Jednodenní akce', 'jednodenní', '2012-01-01', '2012-01-01'), (2, 'Vícedenní akce', 'vícedenní', '2012-01-01', '2012-01-05'), (3, 'Akce různé dny', 'různé dny', '0000-00-00', '0000-00-00'); -- -------------------------------------------------------- CREATE TABLE IF NOT EXISTS `akce_konani` ( `id` int(11) NOT NULL AUTO_INCREMENT, `akce` int(11) NOT NULL, `datum` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; INSERT INTO `akce_konani` (`id`, `akce`, `datum`) VALUES (1, 3, '2012-01-01'), (2, 3, '2012-01-03'), (3, 3, '2012-01-05'); Nenapadne vás někoho něco? Zkoušel pokusy seskupení s union, ale nic mi nevyšlo. Nyní to mám vyřešený tak, že mám cyklus for, procházím den za dnem na 30 dní dopředu a ptám se obou tabulek, jestli v nich v ten den něco není.. Děkuji a těším se na případné nápady, tedy pokud to je vůbec nějak jinak řešitelné. |
||
Tori Profil |
#2 · Zasláno: 24. 11. 2011, 20:28:42
Nevím, jestli to je použitelné, ale napadlo mne: Prvním dotazem bych načetla vícedenní a jednodenní akce a druhým (s INNER JOIN) ty s výběrem dní. Ukládalo by se to do pole ve tvaru:
2011-01-01 => Array ( [0] => Array (1, Akce jednodenní) [1] => Array (2, Akce vícedenní) [2] => Array (3, Akce některé dny) ), 2011-01-02 => Array ( [0] => Array(2, Akce vícedenní) ) ..atd. |
||
Kajman_ Profil * |
#3 · Zasláno: 24. 11. 2011, 21:11:44
Šlo by to tak, že v db bude i tabulka s kalendářem, ale optimálnější bude při výpisu položky uložit delší akce v php do pole a při dalších dnech projet i tohle pole, kde se vypíšou ty, které do toho ještě spadají, a smáznou se z pole ty, které už nebudou třeba.
|
||
WMPopi Profil |
#4 · Zasláno: 25. 11. 2011, 13:20:09
Děkuji vám, ale pole mi na tohle nepřijdou moc pohodlná a moc zátěže tím neušetřím. Nechám tam ten cyklus. Při návštěvnosti 100/den a počtu akcí v řádu desítek to asi nemá smysl řešit..
|
||
Kajman_ Profil * |
#5 · Zasláno: 25. 11. 2011, 13:28:25
WMPopi:
A varianta s kalendářovou tabulkou Vám také nepřijde pohodlná? |
||
Časová prodleva: 12 let
|
0