Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z group by
wlamywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam

następujące zapytanie:
  1. mysql_query("SELECT * FROM `znajomi`, `zdjecia` WHERE (znajomi.kogo = zdjecia.user and znajomi.kto = '$user')group by kogo order by zdjecia.id DESC limit 5;") OR die(mysql_error());


powinno wracać ostatnio dodane zdjęcie każdego znajomego osoby o nazwie $user. Jednak pokazuje ono ostatnie zdjęcie czyli największe id jak wykonać to zapytanie aby zwrócił najmniejsze id z góry dziękuje.
Go to the top of the page
+Quote Post
osiris
post
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


jesli dobrze Cie zrozumialem to powinienes uzyc funkcji agregujacej:
  1. SELECT `znajomi`.*, MIN(`zdjecia`.`id`)
  2. FROM `znajomi`, `zdjecia`
  3. WHERE (znajomi.kogo = zdjecia.user AND znajomi.kto = '$user')
  4. GROUP BY kogo
  5. ORDER BY zdjecia.id DESC LIMIT 5
Go to the top of the page
+Quote Post
wlamywacz
post
Post #3





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Niestety ale przy tym zapytaniu zostaje pobrana tylko nazwa znajomego $row_2['user']
Go to the top of the page
+Quote Post
osiris
post
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Cytat(wlamywacz @ 30.07.2007, 13:19:27 ) *
Niestety ale przy tym zapytaniu zostaje pobrana tylko nazwa znajomego $row_2['user']

Nie rozumiem. Na pewno nie zostanie zwrocona tylko nazwa znajomego bo juz w samym zapytaniu widac ze tabela znajomi ma conajmniej 2 pola + id zdjecia, to jest conajmniej 3 pola zwracane dla kazdego rekordu.

Podaj pelna strukture tabel i wklej dla przykladu wynik jednego zapytania.
Go to the top of the page
+Quote Post
wlamywacz
post
Post #5





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Przepraszam że tak długo. Oto struktura tabel wraz z przykładowymi danymi:

Znajomi:
  1. id kto kogo
  2. 3 patrycja wlamywacz



Zdjęcia:

  1. id user foto data czas tytul
  2. 95 wlamywacz 93034667 21.07.07 12:26:49 Z gogle
  3. 184 wlamywacz 61622009 29.07.07 11:37:13 :)


To zapytanie powinno pobrać wiersz o id 184 dla znajomego użytkownika patrycja o nicku wlamywacz. I tak samo z innymi znajomymi powinno pobierać jeden wiersz o najwyższym id.

Ten post edytował wlamywacz 6.08.2007, 07:59:55
Go to the top of the page
+Quote Post
osiris
post
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Najprawdopodobniej w tabeli ze zdjeciami pole id ma atrybut autoincrement, wiec jesli chcesz pobrac ostatinio dodane zdjecie to trzeba szukac najwiekszego ID a nie najmniejszego jak sugerowales w pierwszym poscie.
Cytat
powinno wracać ostatnio dodane zdjęcie każdego znajomego osoby o nazwie $user. Jednak pokazuje ono ostatnie zdjęcie czyli największe id jak wykonać to zapytanie aby zwrócił najmniejsze id z góry dziękuje.


Podsumowujac:
Dla wybranej osoby(pole kogo) zapytanie ma zwrocic ostatnio dodane zdjecie wszystich jego znajomych(pole kto).
Dobrze zrozumialem?
Jesli tak to zapytanie powinno wygladac tak:

  1. SELECT znajomi.kto, MAX(zdjecia.id)
  2. FROM znajomi LEFT JOIN zdjecia ON zdjecia.user = znajomi.kto
  3. WHERE znajomi.kogo = '$user'
  4. GROUP BY znajomi.kto


Ten post edytował osiris 6.08.2007, 08:47:08
Go to the top of the page
+Quote Post
wlamywacz
post
Post #7





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


  1. SELECT znajomi.kogo, MAX(zdjecia.id)
  2. FROM znajomi LEFT JOIN zdjecia ON zdjecia.user = znajomi.kogo
  3. WHERE znajomi.kto = '$user'
  4. GROUP BY znajomi.kogo


Zapytanie działa jednak jeśli znajomy nie ma zdjęcia powstanie pewien błąd bo wyświetli znajomego ale nie pokaże fotki bo jej nie ma a to będzie źle wyglądać ;(

Ten post edytował wlamywacz 6.08.2007, 09:32:04
Go to the top of the page
+Quote Post
osiris
post
Post #8





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Cytat(wlamywacz @ 6.08.2007, 10:11:41 ) *
Jednak to nie będzie działać sad.gif Trzeba zrobić tak że pierw pobierane są zdjęcia gdyż znajomy może nie posiadać żadnych zdjęć.

Bedzie dzialac. Dla znajomych ktorzy nie maja zdjec, w polu id zdjecia bedzie po prostu NULL bo uzywasz LEFT JOIN.

Aha, czyli nie chcesz zeby pokazywal znajomych ktorzy nie maja zdjecia? Jesli tak to:
  1. SELECT znajomi.kogo, MAX(zdjecia.id)
  2. FROM znajomi, zdjecia
  3. WHERE zdjecia.user = znajomi.kogo AND znajomi.kto = '$user'
  4. GROUP BY znajomi.kogo


Ten post edytował osiris 6.08.2007, 09:34:50
Go to the top of the page
+Quote Post
wlamywacz
post
Post #9





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


osiris czy jest możliwość pogadania z Tobą na gg gdyż tak na forum ciężko wytłumaczyć a jest to dość skomplikowany problem.
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: 20.08.2025 - 08:50