Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: losowe zdjęcia
Forum PHP.pl > Forum > Bazy danych > MySQL
mabor
Witam, mam tabelki

users
- user_id
- name

gallery
- user_id
- picture

Mam problem w wyświetleniem wszystkich userów z tabeli users w ten sposób, żeby dla każdego było losowo wybrane zdjęcie z tabeli gallery.
Czy jest to możliwe w jednym zapytaniu ?
nospor
  1. SELECT *
  2. FROM users u, gallery g WHERE g.user_id = u.user_id AND u.user_id = 1 ORDER BY rand() LIMIT 1
user_id = 1 . dla uzytkownika o id =1
mabor
Troszkę nie tak.

Chodzi mi o wyświetlenie wszystkich userów z users i dla każdego z nich wybrać losowo zdjęcie z drugiej tabeli.
popbart
Chyba nie ma funkcji rand(x,y), więc coś wymyśliłem.
  1. SELECT *
  2. FROM users u INNER JOIN gallery g ON( u.user_id=g.user_id) INNER JOIN (SELECT id,ceiling(max(id)*rand()) AS los
  3. FROM gallery GROUP BY user_id) AS t ON(g.id=t.id)


Edit--------
Trochę się pomyliłem ale to zapytanie działa na bank smile.gif
  1. SELECT temp.user_id,temp.user_name,temp.picture
  2. FROM(SELECT user.user_id,user.name ,gallery.picture
  3. FROM user INNER JOIN gallery ON(user.user_id=gallery.user_id) ORDER BY rand()) AS temp GROUP BY temp.user_id;
mabor
Wielkie dzięki. Jeszcze jeden inner i mam nazwę zdjęcia:
  1. SELECT u.name, t.los, t1.picture
  2. FROM users u INNER JOIN gallery g ON( u.user_id=g.user_id) INNER JOIN (SELECT id, ceiling(max(id)*rand()) AS los
  3. FROM gallery GROUP BY user_id) AS t ON(g.id=t.id) INNER JOIN (SELECT id, picture
  4. FROM gallery ) t1 ON(t1.id=t.los)


Nie zauważyłem Twojego dodatku, ale to co wyżej działa tak samo, może mniej optymalnie. Dzięki
popbart
W tym pierwszym zapytaniu jest taki problem że kod
  1. ceiling(max(id)*rand())
może też wylosować obrazek nie tego usera winksmiley.jpg
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-2024 Invision Power Services, Inc.