Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista Znajomych
Forum PHP.pl > Forum > Przedszkole
samouk
Witam

Napisałem sobie skrypt na liste znajomych usuwanie, akceptacje i wyświetlanie..

Lecz borykam się jak użyć left join by pobrać znajomych w statusie online.

Tabela:
users
-id
-nickname
-time_active (time() + 15 minut)
friends
-id
-id_zaprasza (ktoś kogoś zaprasza)
-id_zapraszany (tego kogoś zaprasza)

Tworzę sobie SELECT id FROM friends WHERE id_zapasza = :mojeid OR id_zapraszany = :mojeid i tutaj myślałem nad pętlą users i poszukiwaniu time_activ ale lepsze rozwiązanie to left join choć nwm za bardzo jak w tym przypadku go użyć.

Co chce osiągnąć?:
Pobrać liczbę userów aktywnych czyli jeśli time() nie wyprzedził time_active to user aktywny. A z friends pobrać kogo mam.


Naprowadzi mnie ktoś jak będzie najskuteczniej?


Dziękuje i pozdrawiam!
Greg0

  1. SELECT id FROM friends WHERE (id_zapasza = :mojeid OR id_zapraszany = :mojeid) AND UNIX_TIMESTAMP() < time_active
samouk
tak ale time_active jest w tabeli users

  1.  
  2. SELECT friends.id_zaprasza, friends.id_zapraszany, users.time_activ FROM `friends` LEFT JOIN `users` ON (friends.id_zaprasza = 1 OR friends.id_zapraszany = 1) WHERE friends.id_zaprasza = users.id OR friends.id_zapraszany = users.id AND UNIX_TIMESTAMP() < users.time_activ



Ale źle działa po pobiera według ilości userów.. Ma ktoś pomysł?


Odświeżam jak mogę businesssmiley.png
b4rt3kk
  1. SELECT * FROM users JOIN friends ON users.id = friends.id_zaprasza JOIN friends ON users.id = friends.id_zapraszany WHERE (friends.id_zaprasza = :moje_id OR friends.id_zapraszany = :moje_id) AND users.time_active > :time
samouk
  1. SELECT * FROM users INNER JOIN friends WHERE (friends.id_zaprasza = :id OR friends.id_zapraszany = :id) AND friends.STATUS = 1 AND users.time_activ > :time


Trochę zedytowałem by nie pluło błędami. Pokazuje mi liczbę moich znajomych doskonale.. ale nie o to chodzi.. bo miało pokazywać aktywnych tylko niewiem czemu nie łapie ost warunek.

Tak moja tabela nazywa się time_activ
b4rt3kk
Bo go zapewne źle napisałeś? W kolumnie time_active zapisuje now()+10? To w takim razie daj users.time_activ > NOW(). Jeśli natomiast w time_activ jest NOW() to daj users.time_activ > NOW() - time interval 10 minutes
samouk

w time_activ mam +15 minut
i używam
  1. $stmt -> bindValue(':time', time(), PDO::PARAM_INT);


raczej błąd leży po stronie zapytania

Tak też nie działa:

  1. SELECT *
  2. FROM friends
  3. INNER JOIN users
  4. WHERE (
  5. friends.id_zaprasza =1
  6. OR friends.id_zapraszany =1
  7. )
  8. AND friends.STATUS =1
  9. AND users.time_activ >1374100320
  10. LIMIT 0 , 30



Już niemam pojęcia jak to zrobić sad.gif
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.