Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi (1 - 5)
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 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


--------------------
Visual Basic - kto by pomyślał :)
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 winksmiley.jpg


--------------------
Visual Basic - kto by pomyślał :)
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 Aktualny czas: 22.08.2025 - 11:28