Autor | Zpráva | ||
---|---|---|---|
kesaj Profil |
#1 · Zasláno: 24. 5. 2014, 22:49:48
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 |
#2 · Zasláno: 24. 5. 2014, 23:15:46
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 |
#3 · Zasláno: 24. 5. 2014, 23:16:15
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 |
#4 · Zasláno: 26. 5. 2014, 21:27:44
Ď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 |
#5 · Zasláno: 26. 5. 2014, 21:36:03
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> |
||
Časová prodleva: 4 dny
|
|||
kesaj Profil |
#7 · Zasláno: 30. 5. 2014, 16:48:43
výborne, spravil som to cez input type date a funguje mi to ... vďaka za pomoc, mám to hotové
|
||
Alphard Profil |
#8 · Zasláno: 30. 5. 2014, 17:04:39
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í :-)
|
||
Časová prodleva: 10 let
|
0