Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL, PHP] Zapytanie do bazy z warunkami
Forum PHP.pl > Forum > Bazy danych
Bejkrools
Witajcie, chce utworzyć funkcje, która na podstawie podanych argumentów wybierze z tabeli NIEPUSTY element, który powstał najbliżej dnia dzisiejszego (czyli jako ostatni). Te dane będą mi potrzebne, ale pierw chciałem, żeby ta funkcja je zwyczajnie wyświetlała.

Tabela:

Kod
[ID]   [MAGAZYN]    [CZAS]       [ITEM1]
1       746G     30.07.2013       Kamil
2       746G     31.07.2013       Ewa
3       746G     01.08.2013       NULL

  1. function checklist_termin ($magazyn)
  2. {
  3. $mysql = mysql_query("SELECT * FROM lista WHERE magazyn = '$magazyn' AND item1 <> '' AND czas = (select max(czas) from lista)")
  4. or die('Blad zapytania');
  5.  
  6. if(mysql_num_rows($mysql) > 0) {
  7. while($k = mysql_fetch_assoc($mysql)) {
  8. echo $k['item1'].' ';
  9. echo $k['czas'];
  10. }
  11. }
  12. }


Chciałbym, żeby w wyniku funkcji było: Ewa 31.07.2013, a niestety wynik jest pusty, wydaje mi sie, ze cos poknociłem z zapytaniem.

Temat do zamknięcia, chyba, że jest jakiś szlachetniejszy sposób niż mój:

  1. function checklist_termin ($magazyn)
  2. {
  3. $mysql = mysql_query("SELECT * FROM lista WHERE magazyn = '$magazyn' AND item1 <> '' AND czas = (select max(czas) from lista)")
  4. or die('Blad zapytania');
  5.  
  6. if(mysql_num_rows($mysql) > 0) {
  7. while($k = mysql_fetch_assoc($mysql)) {
  8. echo $k['item1'].' '.$k['czas'].'<br>';
  9. $last_time = $k['item1'].' '.$k['czas'];
  10. }
  11. }
  12. echo '--<br>'.$last_time;
  13. }
freemp3
Nie musisz używać dodatkowego SELECT-a, aby mieć ostatni czas. Wystarczy dodać sortowanie po kolumnie z czasem i ograniczyć ilość wyników do 1.
Przed wykonaniem zapytania wyświetl je i zobacz, czy aby na pewno jest poprawne. Może w zmiennej magazyn jest zła wartość i dlatego nie znajduje żadnego wyniku.
Bejkrools
problem pierwszy rozwiązałem, ale teraz pojawił sie inny, chce obliczac date miedzy ostatnim wystapieniem niepustego elementu, a dzisiaj.

  1. $data = date("Y.m.d");
  2. $last_data = date("Y.m.d",strtotime($last_time));
  3. $days = strtotime($data) - strtotime($last_data) / (60*60*24);
  4. echo $data.' - '.$last_data.' = '.$days.' dni';


Wynik: 2013.08.01 - 2013.07.25 = 0 dni
freemp3
Zmień kropki na pauzy:
  1. $data = date("Y-m-d");

To samo tyczy się również daty pobieranej z bazy danych
Bejkrools
po poprawieniu:

  1. {
  2. $mysql = mysql_query("SELECT * FROM lista WHERE magazyn = '$magazyn' AND $item <> ''")
  3. or die('Blad zapytania');
  4.  
  5. if(mysql_num_rows($mysql) > 0) {
  6. while($k = mysql_fetch_assoc($mysql)) {
  7. $last_time = date("Y-m-d",strtotime($k['czas']));
  8. }
  9. }
  10. $data = date("Y-m-d");
  11. $last_data = date("Y-m-d",strtotime($last_time));
  12. $days = strtotime($data) - strtotime($last_data) / (60*60*24);
  13. echo $data.' - '.$last_data.' = '.$days.' dni';
  14. }


Wynik echo:

2013-08-01 - 2013-07-25 = 1375292089.0833 dni

zapomniałem o nawiasach :-) Już jest OK!
freemp3
  1. $last_data = date("Y-m-d",strtotime($last_time));

W tej linijce przekazujesz do funkcji strtotime zmienną ktora nie istnieje, więc funkcja zwraca 0.
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.