Autor Zpráva
mikina58
Profil
Ahoj všichni zasvěcení,

mám prosbičku, lámu si s tím hlavu už dlouho a nikde jsem nenašel "odpověď" Tak to zkusím i zde a věřím, že se tu najde někdo, kdo řešil podobný problém jako já. Mám tabulku 'kalendarakci' kde je ID, Datum, Nazev, DruhZavodu, Typ. Výpis těchto dat mám na základě selectu option, kde se uživatelé rozhodují vypsat závody dle druhu (silniční, MTB) a kliknutí na SUBMIT se mi akce vypíší, ale potřeboval bych, aby se vypsaly pouze následující data (závody) od aktuálního dne, zkrátka aby se ty závody, které byly již odjety, nezobrazovaly. Je to vůbec v rámci SELECT * možné takto udělat? Výpis mám pouze řazen dle data, vím že je funkce DATE_SUB(CURDATE() INTERVAL 30 DAY) nebo něco podobného, ale píše mi to vždy chyby.

$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' ORDER BY Datum"; 

Díky za rady ;)
Kcko
Profil
WHERE Datum >= '.date("Y-m-d").'
mikina58
Profil
Kcko:
Děkuji za rychlou odpověď, a kód...

Zkoušel jsem to tam nasadit viz.:
$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' ORDER BY Datum WHERE Datum >= '.date("Y-m-d").';

ale asi bude chyba někde v uvozovkách, nebo úplně někde jinde? :)
Kcko
Profil
Tak samozřejmě ;-), to bys měl vidět i editoru.
$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' ORDER BY Datum WHERE Datum >= ".date('Y-m-d');
juriad
Profil
Kcko:
Ale ty apostrofy tam zůstat musí a samozřejmě, ORDER BY musí být až na konci a podmínky musejí být spojené ANDem.
$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' AND Datum >= '" . date('Y-m-d') . "' ORDER BY Datum";

Případně je možné na úrovni databáze použít funkci CURDATE():
$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' AND Datum >= CURDATE() ORDER BY Datum";
Kcko
Profil
juriad:
Máš pravdu, napsal jsem totální blbost ...

K tvému druhému příkladu, jistě to víš, nebude se to kešovat, není to dobré ... lepší předpřipravit v PHPku.
juriad
Profil
Kcko:
Vím. Nemyslím si však, že je to velká výkonová ztráta. mikina58 jistě netvoří web u kterého by na milisekudách záleželo.

Jako větší problém považuji to, že dotaz neumožňuje zadat jiný počáteční datum. Třeba takové prohlížení akcí po měsících by vyžadovalo záměnu funkce CURDATE za něco jiného a byli bychom zase na začátku.
mikina58
Profil
Tak vy jste jiní mágové :D díky moc, já to fakt hledal na zahraničních fórech a nic jsem nenašel, co by mi pomohlo. Zde jsem se registroval a za cca 15min jsem dostal správnou odpověď, neuvěřitelné! :) jinak je potřeba dodat, že jsem samouk a v tomto ohledu jsem 120% začátečník. Tak proto taková velká radost... Tak ještě jednou díky! Vložil jsem:

$vypis = "SELECT * FROM kalendarakci WHERE DruhZavodu='$id' AND Datum >= '" . date('Y-m-d') . "' ORDER BY Datum";


Fakt dík! Super


Určitě jde o nenáročný webík jednoho cyklistického klubu, ani nevím, zda je povoleno sem vkládat případné odkazy na web. Takže ještě jednou dík!
mikina58
Profil
Ahoj kluci,

řešil jsem výpis jiného formátu data z databáze a tak jsem přidal do vypisu DATE_FORMAT.....:

$vypis = "SELECT *, DATE_FORMAT(Datum, '%d.%m.') as Datum FROM kalendarakci WHERE DruhZavodu='$id' AND Datum >= '" . date('Y-m-d') . "' ORDER BY Datum";

Vypíše se mi například závod, který se jede 11.4. takže super a tak jsem to chtěl, ale přestaly se mi data řadit dle data uloženého v databazi - vzestupně.

Neporadili byste mi, jak to přeformulovat? ORDER BY Datum jsem zkoušel dávat v jiném pořadí, ale hází to chyby a stejně by měl být order by neco až na konci

Nebo tech dotazu je tam az tolik, že uz to není schopno pobrat?



Díky za každý názor
Fisir
Profil
Reaguji na mikinu58:
Neboj, dotazů tam tolik není, existují větší hrůzy.
Pro opačné pořadí řazení zkus ORDER BY Datum DESC.
juriad
Profil
mikina58:
Tím, že jsi si pojmenoval výstup funkce DATE_FORMAT(Datum, '%d.%m.') stejně jako sloupec v databázi, bude ti ORDER BY řadit podle formátovaného datumu abecedně, nikoli datumově. Přejmenuj ten alias.

Možná by mohlo ještě fungovat ORDER BY kalendarakci.Datum, vynutit, že chceš radit podle sloupce v databázi.
mikina58
Profil
Fisir:

Díky za reakci, možná jsem to napsal špatně, ale data se mi namísto řazení dle data, ať už je to vzestupně či sestupně, řadí zkrátka na přeskáčku, takže se mi závody vypisují např.:

11.4.
20.3.
22.6.
9.5.
atd.

když vymažu:

, DATE_FORMAT(Datum, '%d.%m.') as Datum

tak se to dle data začne řadit. Ale když tam ten formát data přidám, řadit to přestane :)
Fisir
Profil
Reaguji na mikinu58:
Viz [#11] juriad.
mikina58
Profil
juriad:

Díky, tak to mě nenapadlo, že by to mohlo kolidovat s tou funkcí, použil jsem tu druhou variantu a vše funguje, takže opět velký dík... :)


Použito:
ORDER BY kalendarakci.Datum


Díky a pěkný zbytek víkendu


Fisir:

Díky i Tobě, super...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: