Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Daty starsze niż 7 dni
Forum PHP.pl > Forum > Przedszkole
vazixable
Witam.
Mam ranking do pewnej gry, i chciałbym aby gracze którzy nie grali 7dni na swojej postaci, nie byli pokazywani w rankingu.

Obecnie napisałem sobie takie zapytanie w skrypcie:

  1. mysql_query("SELECT * FROM player admin WHERE NOT LIKE '1' ORDER BY win desc, level desc, exp desc limit $nastepny_big_ranking_graczy,20");


Które blokuje wyświetlanie rekordów z cyferką 1 w kolumnie admin, i wyświetla rekordy od najważniejszych od win po exp.
Jak w tym zapytaniu mogę zrobić aby nie wyświetlało także graczy którzy nie grali dłużej niż 7dni na swojej postaci?
Oczywiście będzie to WHERE NOT LIKE '1' AND lastplay NOT LIKE <- No i dalej już nie wiem co mogę napisać.

Czas kiedy ostatnio ktoś grał jest zapisany w tabeli lastplay w formie: 2011-05-21 10:12:03

Pozdrawiam.

@EDIT:

Zapewne będzie mi potrzebna funkcja
  1. <?php echo date("Y-m-d h:m:s"); ?>
tylko że co zrobić..

Dziękuję z góry za pomoc.
phpion
@WebCM:
Jest tylko jeden maluśki problem - Twoje rozwiązanie nie wykorzysta ewentualnego indeksu na polu. Poza tym NOW() jest funkcją niedeterministyczną czyli przy każdym wywołaniu wewnątrz SELECT jest pobierany aktualny czas. Tak więc lepiej nie używać Twojej metody.

@vazixable:
Skorzystaj z strtotime by obliczyć datę 7 dni wstecz:
  1. $date = date('Y-m-d H:i:s', strtotime('-7 days')); // albo -1 week

a następnie do swojego zapytania SQL dodaj:
  1. mysql_query("SELECT * FROM player admin WHERE lastplay >= '".$date."' AND NOT LIKE '1' ORDER BY win desc, level desc, exp desc limit $nastepny_big_ranking_graczy,20");


PS: Czy przed NOT LIKE nie brakuje Ci nazwy kolumny?
vazixable
Cytat(phpion @ 21.05.2011, 15:09:25 ) *
@WebCM:
Jest tylko jeden maluśki problem - Twoje rozwiązanie nie wykorzysta ewentualnego indeksu na polu. Poza tym NOW() jest funkcją niedeterministyczną czyli przy każdym wywołaniu wewnątrz SELECT jest pobierany aktualny czas. Tak więc lepiej nie używać Twojej metody.

@vazixable:
Skorzystaj z strtotime by obliczyć datę 7 dni wstecz:
  1. $date = date('Y-m-d H:i:s', strtotime('-7 days')); // albo -1 week

a następnie do swojego zapytania SQL dodaj:
  1. mysql_query("SELECT * FROM player admin WHERE lastplay >= '".$date."' AND NOT LIKE '1' ORDER BY win desc, level desc, exp desc limit $nastepny_big_ranking_graczy,20");


PS: Czy przed NOT LIKE nie brakuje Ci nazwy kolumny?


Fakt, źle wyciągnąłem dane. W tym zapytaniu mam z 15 zablokowanych do wyświetlania kolumn, więc chciałem trochę wymazać żeby nie mylić nikomu zapytania smile.gif

EDIT: Mam mały problem, ponieważ nie działa >=, próbowałem ją wstawiać w różne miejsca, i na stronie poprostu nic nie było. Żadnych rekordów.

Skrypt wygląda tak:


$query = mysql_query("SELECT * FROM player WHERE last_play NOT LIKE '".$date."' AND admin NOT LIKE '1' ORDER BY level desc, exp desc, horse_level desc limit $nastepny_big_ranking_graczy,20"); ?>

Działa ono ok bez >=, ponieważ rekord o tydzień wcześniej równo nie był pokazany dzięki temu. Nie działa jedynie blokada wyników starszych NIŻ.

Można liczyć jeszcze na tę pomoc?

Dziękuję z góry.
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.