Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Daty starsze niż 7 dni, Blokada wyświetlania dat starszych niż 7 dni
vazixable
post 21.05.2011, 10:48:05
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.05.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował vazixable 21.05.2011, 11:15:54
Powód edycji: [batman]: To nie ma nic wspólnego z programowaniem obiektowym. Przenoszę do Przedszkola
Go to the top of the page
+Quote Post
WebCM
post 21.05.2011, 12:52:27
Post #2





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Przejrzyj te funkcje:
http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html
http://dev.mysql.com/doc/refman/5.0/en/dat...nction_datediff
http://dev.mysql.com/doc/refman/5.0/en/dat...ml#function_now

  1. WHERE DATEDIFF(NOW(), lastplay) > 7


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
phpion
post 21.05.2011, 14:09:25
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@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?
Go to the top of the page
+Quote Post
vazixable
post 21.05.2011, 16:49:13
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.05.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował vazixable 21.05.2011, 18:57:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2025 - 04:47