Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> losowe zdjęcia
mabor
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


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 ?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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
Go to the top of the page
+Quote Post
mabor
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


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.
Go to the top of the page
+Quote Post
popbart
post
Post #4





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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;


Ten post edytował popbart 9.08.2005, 06:57:47
Go to the top of the page
+Quote Post
mabor
post
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 4.11.2003

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


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

Ten post edytował mabor 9.08.2005, 07:57:37
Go to the top of the page
+Quote Post
popbart
post
Post #6





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

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


W tym pierwszym zapytaniu jest taki problem że kod
  1. ceiling(max(id)*rand())
może też wylosować obrazek nie tego usera (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 01:41