Autor | Zpráva | ||
---|---|---|---|
amorekj Profil |
Dobrý den,
nadpis zní jednoduše. Zněla by podmínka pro to i jednoduše, kdyby v databázi byly datumy, které by se vypisovaly. Je to složitější. V databázi jsou dva datumy ve tvaru dd.mm.rrrr (doslova - případně se zaplní prázdné místo nulou) a znamenají od - do. Když vypisuji z databáze a připisuji k nim hodnoty, vypisuji celou databázi datumů a ty se poté třídí (využívají se př. v kalendáři). Postupem času by se mohlo stát, že by výpis trval déle než by bylo nutné. Mám tedy třeba 4 záznamy v databázi: 1: 23.09.2013 - 10.10.2013 2: 05.03.2014 - 20.10.2015 3: 04.02.2014 - 20.02.2014 4: 20.01.2014 - 10.02.2014 V kalendáři mám letošní měsíc a potřebuji tam zaznamenat pouze hodnoty, co se týkají února. Nepotřebuji záznamy z předešlého roku ani záznamy, co se týkají budoucna. Podotýkám, že záznamy tady nejsou v každém případě pouze dva, ale dva + všechny mezi tím. V tomto případě by se mi asi hodně rychle hromadila paměť PHP a všechny ostatní činnosti by určitě netrvaly jen pár milisekund. Je možné upravit: $vypis = mysql_query("SELECT * FROM `tabulka`"); Děkuji za rady. Omlouvám se za složitost. |
||
PetrCZ Profil * |
#2 · Zasláno: 5. 2. 2014, 21:27:19
mysql_query("SELECT * FROM `tabulka` WHERE `sloupec_s_intervalem` LIKE '%.02.%'");
|
||
Alphard Profil |
Stačí použít where stylem porovnání hraničních dat s prvním a posledním dnem intervalu:
where do >= 01.02. and od <= 31.02 .
Ale musíte s datem pracovat jako s datem (datový type DATE), nesmí to být obyčejný string. Tohle řešení je obecně správné. Vzhledem k formátování by bylo použitelné i [#2], pokud je alespoň jedno hraniční datum vždy v únovu, ale už nemůžete blíže specifikovat třeba dny. |
||
juriad Profil |
amorekj:
1. předělej datumy, aby byly typu DATE, ne VARCHAR. Pak ti bude fungovat porovnávání pomocí operátorů < a >. Co když budou některé události trvat několik let? Pak je podmínka o dost trikovější: SELECT * FROM tabulka WHERE od <= '2014-02-28' AND do >= '2014-02-01' |
||
PetrCZ Profil * |
#5 · Zasláno: 5. 2. 2014, 22:02:28
Myslím, že bude lepší použít DATE_FORMAT() a OR, protože interval může zasahovat do dvou měsíců (pokud to není striktně zakázáno) a pak by při použití AND nebyla událost nalezena.
mysql_query("SELECT * FROM `tabulka` WHERE DATE_FORMAT(`od`, '%m') = '02' OR DATE_FORMAT(`do`, '%m') = '02'); mysql_query("SELECT * FROM `tabulka` WHERE DATE_FORMAT(`od`, '%Y-%m') = '2013-02' OR DATE_FORMAT(`do`, '%Y-%m') = '2013-02'); |
||
amorekj Profil |
#6 · Zasláno: 5. 2. 2014, 23:43:13
Děkuji moc.. Moc mi to pomohlo :) :)
|
||
Kajman Profil |
#7 · Zasláno: 6. 2. 2014, 09:45:39
|
||
Časová prodleva: 10 let
|
0