Autor | Zpráva | ||
---|---|---|---|
hugo777 Profil * |
#1 · Zasláno: 21. 3. 2011, 23:11:56
Zdravim,
chcem sa spytat, ako urobit co najefektivnejsie nasledujuci select 1.) mam tabulku: id, datum, test napr. 1 2011-13-15 aaaa 2 2011-13-15 aaaa 3 2011-13-16 aaaa 4 2011-13-17 aaaa 5 2011-13-17 aaaa 2.) a ja chcem spravit select, ktory mi vyberie vsetky polozky k najblisziemu dnu, teda: 3.) 4 2011-13-17 aaaa 5 2011-13-17 aaaa Viete mi poradit ako toto spravit jednym selectom? Dakujem, uz som v tom zufaly. |
||
Kajman_ Profil * |
#2 · Zasláno: 21. 3. 2011, 23:16:54
select * from tabulka where datum='2011-13-17' Ale myslím, že to nikdy nic nevybere, třináctý měsíc jen tak neprotlačíte. Místo konkrétního dne můžete použít i curdate a adddate, ale přijdete o možnost sql cache. |
||
hugo777 Profil * |
#3 · Zasláno: 21. 3. 2011, 23:26:16
Kajman:
dakujem, ten mesiac je chyba, predstadme si tam treti mesiac. Ale toto neriesi moj problem pretoze ja tento sql select mozem robit v ktorykolvek iny den po tom to datume, chapete, dnes bude 21.03.2011 a chcem stale aby mi vypisalo polozky z najblizsieho dna. Da sa to? Teoreticky mozem mat druhu pomocnu tabulku kde budem mat id datum, napr: 1 2011-03-15 2. 2011-03-16 3. 2011-03-17 (teda tie unikaty) Viete mi poradit? |
||
YoSarin Profil |
#4 · Zasláno: 22. 3. 2011, 00:05:19 · Upravil/a: YoSarin
|
||
hugo777 Profil * |
#5 · Zasláno: 22. 3. 2011, 00:32:31
Pozeram a skusam to, ale nefuguje mi to :(
Neporadite mi prosim, ako to spravne napisat? Prosiiim |
||
YoSarin Profil |
#6 · Zasláno: 22. 3. 2011, 01:07:17 · Upravil/a: YoSarin
hugo777:
SELECT * FROM tabulka WHERE datum = ADDDATE(CURDATE(), INTERVAL 1 DAY); |
||
hugo777 Profil * |
#7 · Zasláno: 22. 3. 2011, 01:10:50
YoSarin:
nefunguje? nevrati ziadne riadky :( Preco? |
||
YoSarin Profil |
#8 · Zasláno: 22. 3. 2011, 01:18:43
hugo777:
A je v databázi záznam s odpovídajícím datem (tj. 2011-03-23)? A pokud ano, je ten sloupeček opravdu date? Není to timestamp? |
||
hugo777 Profil * |
#9 · Zasláno: 22. 3. 2011, 01:28:59
YoSarin:
„A je v databázi záznam s odpovídajícím datem (tj. 2011-03-23)?“ nie je tam taky, asi sme sa nepochopili. Ja chcem najst zaznamy dna ktory je najaktualnejsi, chapes? |
||
YoSarin Profil |
#10 · Zasláno: 22. 3. 2011, 01:33:17 · Upravil/a: YoSarin
hugo777:
áha, nevím proč jsem z klíčového slova 'test' pochopil že jde o seznam zkoušek, z čehož mi vyplynulo, že nejaktuálnějším dnem bude zítřek. Předpokládám že nejaktuálnější den == dnešek? Pokud ano, pak: SELECT * FROM tabulka WHERE datum = CURDATE(); teď mi ještě dochází - to nejaktuálnější znamená "nejbližší budoucí", že? Pokud ano, tak výše uvedené SQL ti také nepomůže. |
||
YoSarin Profil |
#11 · Zasláno: 22. 3. 2011, 01:40:19 · Upravil/a: YoSarin
Doplněk k předchozímu komentáři:
Pro výběr nejbližších položek, které leží v budoucnosti použij: SELECT * FROM tabulka WHERE datum >= CURDATE() LIMIT X; SELECT * FROM tabulka WHERE datum >= CURDATE() AND datum <= (SELECT MIN(datum) FROM tabulka WHERE datum >= CURDATE()); |
||
hugo777 Profil * |
#12 · Zasláno: 22. 3. 2011, 01:49:51
YoSarin:
stale sa nechapame zrejme, ked dam WHERE datum <= CURDATE() HAVING datum = min(datum) Pro výběr nejbližších položek, které leží v budoucnosti použij: => toto nechcem, ja chcem výběr nejaktulanejších položek, které leží v minulosti od dnesneho dna (teda ak tam bude aj dnesek, tak to je najaktualnejsie, ak minuly tyzden v utorok, tak to je najaktualnejsie.), Zaznam s vyssim datum ako je aktualny sa v databaze nenachadza. Da sa to? Dakujem za trpezlivost. |
||
YoSarin Profil |
#13 · Zasláno: 22. 3. 2011, 02:08:11 · Upravil/a: YoSarin
hugo777: Aha, takže nejnovější starší :) Jsem trouba, který odpovídá dřív než si to sám vyzkouší - předchozí odpověď jsem několikrát opravoval, tak to prosím zkus znovu (jen si otoč většítka na menšítka, tak jako jsi to udělal minule + změň MIN na MAX).
|
||
Kajman_ Profil * |
Když je 21. a má to vybrat toho 17., tak by to mohlo být takto.
select t1.* from tabulka t1, (select max(t2.datum) datum from tabulka t2 where datum<='2011-03-21') t3 where t1.datum = t3.datum Pokud v tabulce nejsou datumy z budoucnosti, tak je where uvnitř té závorky zbytečné a je to jen obdoba příkladu z faq. |
||
Časová prodleva: 13 let
|
0