Autor Zpráva
kesaj
Profil
Zdravím Vás.

Mám vytvorenú jednoduchú databázu, kde si zapisujem do stĺpcov Meno, Priezvisko a Pocet údaje. Mám tam vytvorený aj stĺpec s CurrentTimeStamp, ktorý mi dáva časovú pečiatku. A teda záznamy v tomto stĺpci sú vo formáte : 2014-05-20 22:52:11

Následne cez php robím výpis z tabuľky, výpis vyzerá takto:

<?
$spojeni=mysql_connect("xxx","xxx","xxx");
$co= "SELECT * FROM piestany_zapad WHERE datum >= CURDATE() ORDER BY datum";


$navrat=mysql_db_query("xxx", $co, $spojeni);
echo("<table border=\"1\">");
for ($i=0;$i<mysql_num_fields($navrat); $i++){
echo("<td><strong>".mysql_field_name($navrat, $i)."</strong></td>");
}
while (list($priezvisko, $meno, $pocet, $datum) = mysql_fetch_row($navrat)){
echo("<tr><td>$priezvisko</td><td>$meno</td><td>$pocet</td><td>$datum</td></tr>");

}


$sql = "SELECT SUM(Pocet) AS CelkovyPocet FROM piestany_zapad WHERE datum >= CURDATE()";

$vysledek = MySQL_Query($sql);


echo ("</table>");

if ($vysledek) {
    while($zaznam = MySQL_Fetch_Array($vysledek)) {
            print("<h2> Celkovy pocet: ".$zaznam[0]."</h2>");
            print("<p>".$zaznam[1]."</p>");
    }
} 
else
{ 
    print("Nepodarilo sa pripojit k databaze.");    
}

?>

potreboval by som však spraviť naledovnú vec : Ako pomocou sql a php zobraziť záznamy medzi rôznymi dátumami? Napríklad by som chcel vidieť záznamy za minulý mesiac, ako to mám spraviť?
Alphard
Profil
V základu tam už už podmínku máte (řádek 17). Stačí si vygenerovat hraniční časy a pomocí AND spojit dvě podmínky: where datum >= '2014-04-01 00:00:00' and datum <= '2014-04-30 23:59:59'.
Jestli vás moc netrápí výkon (administrační výpisy apod.) a nechce se vám generovat hraniční časy, lze použít normální porovnání s funkcemi month a year aplikovanými na sloupec s časem.
juriad
Profil
Pomocí funkce strtotime si snadno můžeš objednat určitý datum.
$start = date('Y-m-d H:i:s', strtotime('first day of last month 00:00:00'));
$end = date('Y-m-d H:i:s', strtotime('last day of last month 23:59:59'));

V dotazu pak jen budeš mít:
"WHERE datum BETWEEN '$start' AND '$end'"
kesaj
Profil
Ďakujem za odpovede.

Ak som správne pochopil, asi by som použil ten druhý spôsob.

Chcem sa však spýtať, či by sa to dalo spraviť aj tak, že by som vytvoril formulár s poliami

OD

Deň, Mesiac, Rok

DO

Deň, Mesiac, Rok

kde by spravilo select a vrátilo by výsledky za dané dátumy. Je potrebné tam však uvádzať aj čas? Alebo by sa dal spraviť týmto spôsobom iba formát Y-m-d?

Ďakujem pekne za pomoc.
juriad
Profil
Buď k datumu od doplníš čas 00:00:00 a k do doplníš čas 23:59:59, (ten čas tam prostě přilepíš).

Nebo změníš podmínku na datum >= od AND datum < (do+1).
Do+1 je den po datumu do. Ten musíš vypočítat v PHP.
Všimni si ostré a neostré nerovnosti.

Nebo, pokud ti přílíš nezáleží na výkonu databáze, můžeš formulovat podmínku přímo jen pomocí datumů:
DATE(datum) >= od AND DATE(datum) < do. DATE je funkce v databázi, která zahodí časovou složku.
Píšu o výkonu, protože tento typ dotazu nelze vykonat příliš efektivně; předchozí dvě možnosti budou o něco rychlejší.
kesaj
Profil
šlo by to spraviť aj pomocou funkcie input type date? :

<h3>Zadaj datum od</h3>

<form action="test.php">
  OD: <input type="date" name="datum">
  <input type="submit">
</form>

<h3>Zadaj datum do</h3>

<form action="test.php">
  DO: <input type="date" name="datum">
  <input type="submit">
</form>
kesaj
Profil
výborne, spravil som to cez input type date a funguje mi to ... vďaka za pomoc, mám to hotové
Alphard
Profil
Zrovna pro tohle není v prohlížečích moc dobrá podpora, koukněte na jqueryui.com/datepicker. Ale mně by to nevadilo, kombinace mých oblíbených Opera + Chrome to zrovna umí :-)

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: