Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dwie tabele + grupowanie wyników z limitem
Forum PHP.pl > Forum > Przedszkole
waxman
Proszę o pomoc bo męczę się z tym drugi dzień.

Mam 2 tabele. w "a" "#__user_forum" przechowuję informacje użytkowników odnośnie konkretnego forum.
Np dla forum o id 2 (forum_id) chcę wyświetlić listę użytkowników (user_id) pogrupowanych według reputacji (reputation) , ale tak żeby pobierało tylko max trzech użytkowników z każdej reputacji.
Następnie ma pobrać dane użytkownika z tabeli "#__users" 'b' czyli b.id = a.user_id

gdzie xxx to przykładowa nazwa użytkownika pobrana z tabeli #__users

Czyli wynik ma wyglądać tak:
reputacja1
użytkownicy:919-xxx,924-xxx,926-xxx,

reputacja2
użytkownicy:917-xxx,922-xxx,923-xxx

reputacja3
użytkownicy:920-xxx,921-xxx,925-xxx

Chcę to zrobić w jednym zapytaniu moje próby wyglądają tak:
W tym zapytaniu wyświetla tylko po dwóch użytkowników i to z każdego forum
  1. $query ="
  2. SELECT a.user_id AS user_id,a.reputation as reputation, b.name AS name,COUNT(b.id) AS 'outgoing call count'
  3. FROM
  4. #__user_forum a
  5. LEFT JOIN
  6. (
  7. SELECT id, name FROM #__users
  8. ) b
  9. ON a.user_id = b.id
  10. AND a.reputation BETWEEN 1 AND 3
  11. WHERE a.forum_id = 2
  12. GROUP BY a.reputation";


a w tym to wyświetla tylko po jednym użytkowniku z każdej reputacji
  1. $query="SELECT a.user_id AS user_id,a.reputation as reputation, b.name AS name FROM #__user_forum as a LEFT JOIN #__users AS b ON a.user_id = b.id
  2. WHERE a.forum_id = 2 GROUP BY a.reputation";


mam jeszcze coś takiego, ale to w ogóle jest porażka
  1. $query ="
  2. SELECT a.user_id AS user_id,a.reputation as reputation, b.name AS name,COUNT(b.id) AS countt
  3. FROM
  4. #__user_forum a
  5. LEFT JOIN
  6. (
  7. SELECT id, name FROM #__users
  8. ) b
  9. ON a.user_id = b.id
  10. AND a.reputation BETWEEN 1 AND 3
  11. WHERE a.forum_id = 2"


Johnas
zobacz z tego przykładu... informacje o rangach pobieram pobieram z pierwszej tabeli...

  1. SELECT * FROM `4um_accounts` LEFT JOIN `4um_ranks` ON `4um_accounts`.`rank` = `4um_ranks`.`id`


śmiesznie bo starasz się nazywać tabelę, a podaj ich całą nazwę w `nazwa_tabeli`.`identyfikator` zamiast a czy b bo nie wiem czy to działa, czy tylko to przykłady, ale według mnie to raczej druga opcja... jestem noobem z podstawówki ...
`

spróbuj a pozamieniać na nazwę tabeli w "`" tych znakach... (shift+tylda)
nospor
@GodOfPeople to sie nazywa alias i nie jest to smieszne a normalna praktyka. Mozesz robic alias zarowna dla pol jak i tabel. Polecam lekture
https://dev.mysql.com/doc/refman/8.0/en/select.html
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.