Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql][php] Zapytanie mysql
Forum PHP.pl > Forum > Przedszkole
in5ane
Elo, jak mam skonstruować zapytanie mysql, aby mi wyświetlało wszystkie imprezy późniejsze niż dzień dzisiejszy bądź równe dniu dzisiejszemu.

To co skombinowałem to nie działa :/

  1. <?php
  2. $rok = date('Y');
  3. $msc = date('m');
  4. $queryq = "SELECT * FROM page_imprezy WHERE status = '2' AND miesiac >= $msc AND rok >= $rok";
  5. ?>



@edit: a może pierw powiedźcie jak będzie lepiej. Bo będę musiał trzymać datę imprezy w bazie, to byłby nie problem, ale problemem będzie jak będzie data np. 15-18.02.2008, to trzymać to może w polu text czy varchar i explodem sobie rozbić i wtedy do zapytania i datę do wyświetlenie też bym tak miał, proszę o pomoc.
marcio
a moze zrob tak zapisuj razem z impra date i potem rob zapytanie na koncu daj order by data desc i zrob if'a ze jezeli data jest starsza niz ta co ci potrzebna to nie wyswietlaj albo na odwrot
rolnix
Trzymaj datę jako typ date. Masz operatory porównania, > oraz <. Funkcję php'ową mktime też.
in5ane
Zacznę od nowa.

Chcę tak zrobić, że ma wyświetlić mi tylko imprezy, które odbywają się dnia dzisiejszego albo później, te które się już odbyły to mają się nie wyświetlać.
Tylko jest jeden problem, bo data może wyglądać np. tak:
15-19.11.2007
24.12.2007
5.5.2008
i moje pytanie brzmi, jak trzymać w bazie taką datę (może pole text) i jak mam skonstruować zapytanie do tego.

Z góry dziękuję smile.gif
nevt
najlepiej jak zrobisz dwie kolumny: imp_start, imp_stop, obie typu DATE
oczywiście dla imprezy 1 dniowej musisz zapisywać do obu pól tą sama datę,
ale wyszukiwanie będzie za to bardzo proste:
  1. SELECT * FROM imprezy WHERE imp_start >= CURDATE() OR imp_stop >= CURDATE();


Piszę z ręki i nie mam gdzie sprawdzić, ale powinno działać...
in5ane
No dobra, ale jak mam wyświetlać później datę?
Żeby wyświetliło poprawnie...
nevt
tak na przykład:
  1. SELECT CONCAT(IF(imp_start=imp_stop, '', DATE_FORMAT(imp_start, '%d-')), DATE_FORMAT(imp_stop, '%d.%m.%Y')) AS imp_data FROM imprezy;

chociaż łatwiej byłoby to obrobić po stronie PHP...
in5ane
A jak zrobić żeby datę wyświetlić (tylko że już po stronie php) datę w ten sposób 20.12.2007 albo jeżeli są różne to 20-24.12.2007 questionmark.gif

@edit: tzn, chcę aby wyświetlało od dnia a nie od roku i żeby zamiast "-" była "."
nevt
in5ane nawet nie zadales sobie trudu sprawdzic jakie wyniki daje moje ostatnie rozwiazanie... wstyd...
in5ane
Zadałem sobie trud, ale chciałem wiedzieć jak zrobić to po stronie php.
nevt
W SQL nie wiesz jak... w PHP nie wiesz jak... A chociaż spróbowałeś? Czy porywasz się z motyką na słońce? Pokazałbyś kawłek własnego kodu, wykazałbyś, że się starasz - znaleźliby się chętni do pomocy. Sępów nikt tutaj nie lubi... Ale mam dzisiaj świetny nastrój, więc co mi tam...

Zakładam że wynik kolejnego wiersza zapytania (w wersji bez formatowania w SQL) masz w tablicy acocjacyjnej $result, wtedy to będzie coś w rodzaju:
  1. <?php
  2. $data = ($result['imp_start'] == $result['imp_stop'] ? '' : substr($result['imp_start'], -2).'-');
  3. $tmp .= explode('-', $result['imp_stop']);
  4. $data .= sprintf('%s.%s.%s', $tmp[2], $tmp[1], $tmp[0]);
  5. ?>

to też będzie działać:
  1. <?php
  2. $data = ($result['imp_start'] == $result['imp_stop'] ? '' : substr($result['imp_start'], -2).'-');
  3. $data .= preg_replace('/(d{4})-(d{2})-(d{2})/', '3.2.1', $result['imp_stop']);
  4. ?>

ale można też np. tak:
  1. <?php
  2. $data = ($result['imp_start'] == $result['imp_stop'] ? '' : substr($result['imp_start'], -2).'-');
  3. $tmp = explode('-', $result['imp_stop']);
  4. $tmp = array_reverse($tmp);
  5. $data .= implode('.', $tmp);
  6. ?>

albo tak:
  1. <?php
  2. $data = ($result['imp_start'] == $result['imp_stop'] ? '' : substr($result['imp_start'], -2).'-');
  3. $data .= substr($result['imp_stop'], 8, 2).'.'.substr($result['imp_stop'], 5, 2).'.'.substr($result['imp_stop'], 0, 4);
  4. ?>

Albo na 100 innych sposobów...

A cała ta wiedza tajemna ukryta jest w setkach manuali i tutoriali dostępnych za free w necie. Tylko czytać, uczyć się i ćwiczyć, ćwiczyć, ćwiczyć. Wklejąc cudze "gotowce, nie uczysz się niczego...

Pozdrawiam i powodzenia...
in5ane
Wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.