Autor | Zpráva | ||
---|---|---|---|
stepanka Profil * |
#1 · Zasláno: 15. 3. 2011, 14:45:47
Ahoj,
poradil by mi někdo prosím s jedním těžším dotazem? Už s ním válčím asi hodinu. Mám tuto tabulku: TABLE `program` ( `programID` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `date` date NOT NULL, `time` time NOT NULL, PRIMARY KEY (`programID`) ) A v ní pro každý den cca 20 záznamů, například: (1, 'Pojďte pane, budeme si hrát', '2011-03-15', '06:30:00') (2, 'Čertík Lucifuk', '2011-03-15', '07:00:00') (3, 'Požár v Kocourkově', '2011-03-15', '07:30:00') Potřebovala bych vybrat aktuální 4 pořady, tzn. ten co běží teď, jeden před ním a dva co budou následovat. Posílám kostru dotazu, raději ji osekám o moje neúspěšné pokusy: $date = date('Y-m-d'); SELECT A.programID, A.title, A.time FROM program A WHERE A.date = '$date' GROUP BY A.programID ORDER BY A.date ASC, A.time ASC Nevěděl by někdo, jak na to? Moc děkuju! |
||
Kajman_ Profil * |
$date = date('Y-m-d'); $time = date('G:i'); (SELECT A.programID, A.title, A.time, A.date FROM program A WHERE A.date > '$date' OR (A.date = '$date' AND A.time > '$time') ORDER BY A.date ASC, A.time ASC LIMIT 2) UNION ALL (SELECT A.programID, A.title, A.time, A.date FROM program A WHERE A.date < '$date' OR (A.date = '$date' AND A.time <= '$time') ORDER BY A.date DESC, A.time DESC LIMIT 2) ORDER BY `date`, `time` Když by to bylo pomalé i s indexem (date,time), tak bych do where přidal ještě podmínku, že to date je v (včera,dnes,zitra) - snad je každý den aspoň pár pořadů. |
||
stepanka Profil * |
#3 · Zasláno: 16. 3. 2011, 09:04:19
Kajman:
Mockrát děkuju, zachránil jsi mě. Akorát to řazení jsem přehodila, a vybírá to data úplně perfektně. (SELECT A.programID, A.title, A.time, A.date FROM program A WHERE A.date > '$date' OR (A.date = '$date' AND A.time > '$time') ORDER BY A.date DESC, A.time DESC LIMIT 2) UNION ALL (SELECT A.programID, A.title, A.time, A.date FROM program A WHERE A.date < '$date' OR (A.date = '$date' AND A.time <= '$time') ORDER BY A.date ASC, A.time ASC LIMIT 2) ORDER BY `date`, `time` |
||
stepanka Profil * |
#4 · Zasláno: 16. 3. 2011, 09:24:50
Kajman:
Vlastně program musí být vždy dnešní, tzn. že jsem smazala ty první částí podmínky WHERE, a je to super. Akorát se to snažím ještě upravit tak, aby: - pokud neexistuje žádný pořad před aktuálním (běží první pořad z dnešního dne), mělo by to vybrat stále 4 položky, 1 aktuální pořad, 3 po něm. - pokud neexistuje žádný pořad po aktuálním (běží poslední pořad dnešního dne), mělo by to vybrat stále 4 položky, 1 aktuální, 3 před ním. Nepomohl bys mi, prosím, ještě s tímto? |
||
Kajman_ Profil * |
#5 · Zasláno: 16. 3. 2011, 11:21:02
stepanka:
„Akorát to řazení jsem přehodila, a vybírá to data úplně perfektně.“ Pokud jsi nepřehodila i < a >, tak mi tu opravu hlava nebere. Jestli nebyla spíš chyba ve špatně předpokládaném přetypování u toho time. Možná bude lepší. $time = date('H:i:00'); „Nepomohl bys mi, prosím, ještě s tímto?“ Tak to bych si udělal zvlášť ty dva dotazy vždy s limit 4 a podle vrácených řádků, bych se v php rozhodl, kolik ze kterého dotazu se má vypsat. |
||
stepanka Profil * |
#6 · Zasláno: 16. 3. 2011, 12:17:27
Kajman:
„Pokud jsi nepřehodila i < a >, tak mi tu opravu hlava nebere.“ Nepřehodila, ale opravdu to až teď řadí správně. Ten Tvůj dotaz vybral dva úplně první ranní pořady ze dne, plus dva pořady z úplného konce dne. Teď vypadá takto, a vypisuje to správně: (SELECT A.programID, A.originalProgramID, A.title, A.time, A.date FROM program A WHERE A.date = '$date' AND A.time > '$time' ORDER BY A.date ASC, A.time ASC LIMIT 2) UNION ALL (SELECT A.programID, A.originalProgramID, A.title, A.time, A.date FROM program A WHERE A.date = '$date' AND A.time <= '$time' ORDER BY A.date DESC, A.time DESC LIMIT 2) ORDER BY date, time „Tak to bych si udělal zvlášť ty dva dotazy vždy s limit 4 a podle vrácených řádků, bych se v php rozhodl, kolik ze kterého dotazu se má vypsat.“ Vidíš, dobrý nápad. Udělám to, jak píšeš. Díky moc za všechno! |
||
Kajman_ Profil * |
#7 · Zasláno: 16. 3. 2011, 12:35:30
|
||
stepanka Profil * |
#8 · Zasláno: 16. 3. 2011, 12:54:30
Kajman:
Tak teď jsem z toho trochu zmatená, protože se mi ty kódy opravdu liší, možná jsem se ji i já někde spletla. Každopádně teď mi to funguje správně, tak jak píšu v [#6] . Už mám i ty další dotazy a úpravy v PHP pro výběr před a po programu. Téma tedy vyřešeno. Děkuju. |
||
Časová prodleva: 13 let
|
0