Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]curdate() i większe liczba dni
Forum PHP.pl > Forum > Przedszkole
dezerter_af
Witam,

Nabazgrałem trochę kodu, który co zabawne działa, ale nie do końca.

1. W bazie mam wrzuconą datę w postaci 2012-03-16. Gdy używam curdate() -1 w zapytaniu to jest ok, ale gdy chcę np. ostatnie 40 dni to już nie jest ok :D

Podam przykład, wprowadzam produkty na stronę firmy w której pracuje (Tak wykorzystują pracowników :), pracuje od 10 marca i również od tej daty zacząłem po trochu wprowadzać. Skrypt ma za zadanie policzyć ile wprowadziłem ale... Gdy w zapytanie dam curdate()-50 to wyświetla się za mała liczba ale gdy dam już -1000 to jest ok...

Poniżej kod:

  1. <?php echo "
  2. <form action=\"praca.php\" method=\"get\">
  3. <select name=\"id_sera\">
  4. <option value=8>Sergiusz</option>
  5. <option value=9>Sergiusz Homework</option>
  6. <option value=5>Przemek</option>
  7. </select>
  8. <br />
  9. <input type=\"text\" name=\"data\" />
  10. <input type=\"submit\"> tutaj </input>
  11. </form>"
  12. ?>
  13.  
  14. <?php
  15. require("pliki/sprawdzCzyZalogowany.php");
  16. require("pliki/uprawnienia.php");
  17. require("pliki/baza_polacz.php");
  18.  
  19. $data = $_GET['data'];
  20. $id_usera = $_GET['id_sera'];
  21.  
  22. $tresc_zapytania = "SELECT * FROM produkty WHERE id_dodal_uzytkownik='$id_usera' and data_dodania>=curdate()-'$data'"; // treść zapytania
  23. $zapytanie = mysql_query($tresc_zapytania); // wykonanie zapytania
  24.  
  25. $kolumny = mysql_num_rows($zapytanie); // liczenie wyników
  26. if ($kolumny == 0) // Sprawdzanie czy są wyniki
  27. echo 'Nie znaleziono żadnych produktów, wprowadzonych przez tego użytkownika';
  28. else
  29. echo 'Znaleziono '.$kolumny.' wprowadzpnych produktów, oto one:<br><br>';
  30.  
  31. while ($kolumna = mysql_fetch_row($zapytanie)) // wyświetlanie wyników
  32. {
  33. echo "Symbol: <strong>".$kolumna[9]."/".$kolumna[10]."</strong> <br />";
  34. echo "Nazwa: <Strong>".$kolumna[11]."</strong> <br />";
  35. echo "Data wprowadzenia: <Strong>".$kolumna[2]."</strong> &nbsp &nbsp &nbsp &nbsp &nbsp data modyfikacji: <Strong>".$kolumna[4]. "<br /> <br />";
  36. }
  37.  
  38. ?>



2. Kolejny problem to wyświetlanie... Otóż pierwsze X rekordów wyświetla się ok ale dalej się już rozsypuje, poniżej screeny:

Link: http://easycaptures.com/fs/uploaded/512/5257532992.jpg
mls
Ad. 1: http://dev.mysql.com/doc/refman/5.5/en/dat...-functions.html -> INTERVAL
dezerter_af
@mls

Rzeczywiście, pomogło. Trochę inaczej to sobie wyobrażałem, no ale.. ważne, żę działa. A dowiedziałem się przy okazji, że operacje na curdate() to:

curadate()
2012-04-21

curdate() -41
20120421 - 10 = 20120380 ( Ato już nie jest data smile.gif

A odnośnie punktu drugiego jest jakieś rozwiązanie? Może moja pętla nie działa jak powinna ?

Ok trochę się zmienilo smile.gif

Postanowiłem zmodyfikować kod tak aby dzielił wynik na strony. Skorzystałem z gotowego rozwiązania które działa świetnie.
Poniżej mój kod, może siękomuś przydać smile.gif

Ale mam jeszcze jedno pytanie, odnośnie zapytań do mysql.
Jak wyciągnać rekordy nie dalej niż sprzed 1.03.2012 ? Czyli od teraz do daty którą podałem.
W bazie mam date podaną w sposób: 2012-10-24

  1. <?php
  2. require("pliki/sprawdzCzyZalogowany.php");
  3. require("pliki/uprawnienia.php");
  4. require("pliki/baza_polacz.php");
  5.  
  6.  
  7. echo "
  8. <form action=\"praca.php\" method=\"get\">
  9. <table cellspacing=15>
  10. <tr>
  11. <td>
  12. Wybierz użytkownika:
  13. </td>
  14. <td>
  15. <select name=\"id_usera\">
  16. <option value=8>Sergiusz</option>
  17. <option value=9>Sergiusz Homework</option>
  18. <option value=5>Przemek</option>
  19. </select>
  20. </td>
  21. </tr>
  22. <tr>
  23. <td>
  24. Z ostatnich:
  25. </td>
  26. <td>
  27. <input type=\"text\" name=\"data\" size=3> dni.
  28. </td>
  29. </tr>
  30. </table>
  31. <input type=\"submit\" value=\"Sprawdź!\"></input>
  32. </form>" ;
  33.  
  34. $data = $_GET['data'];
  35. $id_usera = $_GET['id_usera'];
  36.  
  37. define('ILOSC_WYNIKOW_NA_STRONIE', 20);
  38. $SQL = "SELECT SQL_CALC_FOUND_ROWS *
  39. FROM produkty
  40. WHERE id_dodal_uzytkownik='$id_usera' and
  41. DATE_SUB(CURDATE(),INTERVAL '$data' DAY) <= data_dodania
  42. ORDER BY symbol1 ASC
  43. LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  44. // pobiera ILOSC_NA_STRONIE rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['porcja']*ILOSC_NA_STRONIE
  45. $RES = mysql_query($SQL); // wykonujemy zapytanie
  46.  
  47. $tresc_zapytania = "SELECT * FROM produkty WHERE id_dodal_uzytkownik='$id_usera' and DATE_SUB(CURDATE(),INTERVAL '$data' DAY) <= data_dodania ORDER by symbol1"; // treść zapytania
  48. $zapytanie = mysql_query($tresc_zapytania); // wykonanie zapytania
  49. $kolumny = mysql_num_rows($zapytanie); // liczenie wyników
  50. if ($id_usera == 8)
  51. $user_w = "Sergiusz";
  52. elseif ($id_usera == 9)
  53. $user_w = "Sergiusz Homework";
  54. elseif ($id_usera == 5)
  55. $user_w = "Przemysław";
  56.  
  57. echo '<br/ ><br />Znaleziono <strong>'.$kolumny.'</strong> wprowadzonych produktów z ostatnich <strong>'.$data.'</strong> dni. Produkty wprowadzone przez: <strong>'.$user_w.'</strong> <br /><br /><br />';
  58. echo "<table cellpadding=5 cellspacing=0>";
  59. echo "<tr> <td>ID</td> <td>Nazwa</td> <td>Symbol</td> <td>Data dodania</td> </tr>";
  60. while($AFR = mysql_fetch_assoc($RES)){
  61. /*Wyświetlanie wyników, przykładowo:*/
  62. echo '<tr>
  63. <td colspan="4"><hr></td>
  64. </tr>';
  65. echo '<tr>';
  66. echo '<td>'.$AFR['id'].'</td>';
  67. echo '<td><strong>'.$AFR['nazwa'].'</strong></td>';
  68. echo '<td><strong>'.$AFR['symbol1'].'/'.$AFR['symbol2'].'</strong></td>';
  69. echo '<td><strong>'.$AFR['data_dodania'].'</strong></td>';
  70. echo '</tr>';
  71.  
  72. }
  73. echo "</table>";
  74.  
  75. echo '<br /><br />';
  76. // w inny sposób pobieramy ilosc danych w bazie
  77. $SQL = "SELECT FOUND_ROWS() as Ilosc";
  78. $RES= mysql_query($SQL);
  79. list($iloscWpisow) = mysql_fetch_row($RES);
  80.  
  81. //Teraz wypadało by wyświetlić jakąś nawigację
  82.  
  83. //jeśli nie jesteśmy na pierwszej stronie
  84. if($_GET['porcja']>0){
  85. //wyswietlamy link do poprzedniej strony
  86. echo '<a href="?porcja='.($_GET['porcja']-1).'&data='.$data.'&id_usera='.$id_usera.'">Poprzednie</a> ';
  87. }
  88.  
  89. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  90. echo '<a href="?porcja='.($i).'&data='.$data.'&id_usera='.$id_usera.'">[ '.($i+1).' ]</a> ';
  91. }
  92. //jeśli nie jesteśmy na ostatniej stronie
  93. if($_GET['porcja']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  94. //wyświetlamy link do nastepnej strony
  95. echo ' <a href="?porcja='.($_GET['porcja']+1).'&data='.$data.'&id_usera='.$id_usera.'">następne</a>';
  96. }
  97. ?>


@bump
bpskiba
Cytat(dezerter_af @ 22.04.2012, 13:12:34 ) *
Ale mam jeszcze jedno pytanie, odnośnie zapytań do mysql.
Jak wyciągnać rekordy nie dalej niż sprzed 1.03.2012 ? Czyli od teraz do daty którą podałem.
W bazie mam date podaną w sposób: 2012-10-24


  1. SELECT * FROM tabela WHERE Pole_tabeli>DATE(DATE_ADD(NOW(),INTERVAL -2 DAY))
dezerter_af
Niestety to nie jest odpowiedź na moje pytanie. POdałeś sposób jak wyciągnąć ostatnie dwa dni a mnie interesuje konkretna data.
bpskiba
Cytat(dezerter_af @ 22.04.2012, 13:30:18 ) *
Niestety to nie jest odpowiedź na moje pytanie. POdałeś sposób jak wyciągnąć ostatnie dwa dni a mnie interesuje konkretna data.


Tam jest operator porównania. data jest większa niż...
dezerter_af
Nie wiem czy dobrze rozumiem,

  1. SELECT * FROM tabela WHERE data_dodania > DATE(DATE_ADD(NOW(),INTERVAL -2 DAY))


Tylko po co ten interval? Nie wystarczy
  1. SELECT * FROM tabela WHERE data_dodania > DATE(NOW()

Albo jakoś tak? Przepraszam za moje pytanie ale jeszcze leże jeżeli chodzi o zapytania do bazy...
bpskiba
Cytat(dezerter_af @ 22.04.2012, 23:08:25 ) *
Nie wiem czy dobrze rozumiem,

  1. SELECT * FROM tabela WHERE data_dodania > DATE(DATE_ADD(NOW(),INTERVAL -2 DAY))


Tylko po co ten interval? Nie wystarczy
  1. SELECT * FROM tabela WHERE data_dodania > DATE(NOW()

Albo jakoś tak? Przepraszam za moje pytanie ale jeszcze leże jeżeli chodzi o zapytania do bazy...


Chciałeś dane z ostatnich dwóch dni.
Twoje zapytanie zwróci rekordy, których data_dodania będzie późniejsza niż dzisiaj (a w tym nie ma logiki)

Natomiast moje zapytanie zwróci rekordy, których data_dodania będzie późniejsza niż data, która była dwa dni temu, czyli zwróci wczorajsze i dzisiejsze rekordy.
dezerter_af
Przeczytaj przyjacielu jeszcze raz moje pytanie smile.gif Cel powtórzyłem kilka razy.

Chodzi mi o konkretną datę czyli, żeby za każdym razem nie wyciągało dalej niż 01.03.2012 czyli od dzisiaj do tej daty smile.gif

@bump
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.