Autor Zpráva
patiseq
Profil *
<?php
$datum = StrFTime("%Y/%m/%d");
$vypis = mysql_query("SELECT * FROM calendar"); 
while($row = mysql_fetch_array($vypis))
 {
if(date($datum)==$row["eventDate"]) echo "<strong>Datum:</strong> ".$row["eventDate"]."<br><strong>Nadpis:</strong> ".$row["Title"]."<br><strong>Detail:</strong> ".$row["Detail"];
elseif(date($datum)>$row["eventDate"]) echo "<font color='red'>Žádná akce dnes neprobíhá</font>";
} 
 echo "<br><br>"
?>
Čau lidi mám problém s tímto výpisem z databáze. Chtěl aby se mi z databáze vypsala aktuální akce která se koná pouze dnes když není splněna podmíka $datum==$row["eventDate"] aby to napsalo že žádná akce neprobíhá
Tori
Profil
patiseq:
Co to je za magii s tím strftime a date? :) Koukněte se na obě funkce, co vracejí a jaké parametry se jim mají předávat a uvidíte příčinu nefunkčnosti.

Nicméně i když to opravíte, tak tenhle způsob řešení je obecně špatný:
- je neefektivní tahat z DB všechny řádky a porovnávat je v PHP. Místo toho přidejte takovou podmínku WHERE, aby vám dotaz vrátil přesně a jenom to, co chcete. Pokud dotaz nic nenajde (tedy vrátí 0 řádků), napíšete "žádná akce dnes".
- do databáze se má datum ukládat jako typ DATE nebo i s časem jako DATETIME, případně jako INT (unix timestamp). Určitě ne jako řetězec v nějakém vlastním formátu. Když to budete mít totiž uložené jako DATE, tak můžete už v SQL dotazu snadno porovnávat (s dnešním datem), řadit, seskupovat podle měsíců apod.
peta
Profil
Goglovanim jsem nasel par takovychto dotazu. Nejsem si ale jisty, zda je interval resenim pro vsechny moznosti, protoze bere +1 day a -1 day

SELECT * FROM yourtable 
WHERE DATE( FROM_UNIXTIME( `time` ) ) = DATE_SUB( CURDATE(), INTERVAL 1 DAY )

SELECT * FROM yourtable 
WHERE DATE( FROM_UNIXTIME( `time` ) ) BETWEEN '2012-2-1' AND '2012-2-29'

SELECT COUNT(*) AS total_number FROM menjava 
WHERE date_submitted >= DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY

WHERE enddate BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 14 DAY);

Spis mozna neco takoveho, CallDate je nazev sloupce s typem DATETIME
WHERE ( (DAY(CallDate) = DAY(GETDATE()) AND (MONTH(CallDate) = MONTH(GETDATE()) AND (YEAR(CallDate) = YEAR(GETDATE()) )
Tori
Profil
peta:
Spis mozna neco takoveho
Spíš radši ne -jednak funkce GETDATE pokud vím v MySQL není, asi by se místo toho použilo NOW(), a hlavně pokud je sloupec typu datetime (což patiseq patrně nemá), tak stačí porovnávat WHERE DATE(sloupec) = CURRENT_DATE.
patiseq
Profil *
peta:
- je neefektivní tahat z DB všechny řádky a porovnávat je v PHP. Místo toho přidejte takovou podmínku WHERE, aby vám dotaz vrátil přesně a jenom to, co chcete. Pokud dotaz nic nenajde (tedy vrátí 0 řádků), napíšete "žádná akce dnes".
Já jsem začátečník se skriptama s databází můžu poprosit o příklad jak by to asi mohlo bejt prosím :)) a Všem děkuji za odpovědi


Tori:
Já jsem začátečník se skriptama s databází můžu poprosit o příklad jak by to asi mohlo bejt prosím :)) a Všem děkuji za odpovědi
Tori
Profil
patiseq:
Když budu vycházet z [#1], tak tohle porovnávání přesunu do SQL třeba takhle:
$datum = StrFTime("%Y/%m/%d");
$vypis = mysql_query("SELECT * FROM calendar WHERE eventDate = '".$datum."'"); 
if (mysql_num_rows($vypis) > 0) {
    while($row = mysql_fetch_array($vypis)) {
      echo "<strong>Datum:</strong> ".$row["eventDate"]."<br><strong>Nadpis:</strong> ".$row["Title"]."<br><strong>Detail:</strong> ".$row["Detail"];
    }
} else {
    echo "<font color='red'>Žádná akce dnes neprobíhá</font>";
}
Ale spíš bych změnila způsob ukládání datumu do DB (viz [#2]). Můžete si k tabulce přidat další sloupec typu DATE, pak do něj updatem nakopírovat data ze sloupce eventDate (hodí se vám funkce STR_TO_DATE), zkontrolovat správnost dat, smazat starý sloupec, nový přejmenovat.
patiseq
Profil *
Děkuji mnohokrát za odpověď moc jste mi pomohli

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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