Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dwie tabele + grupowanie wyników z limitem
waxman
post 17.01.2020, 19:49:56
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.05.2019

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


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"




Ten post edytował waxman 17.01.2020, 19:53:11
Go to the top of the page
+Quote Post
Johnas
post 20.01.2020, 01:01:34
Post #2





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


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)


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
nospor
post 20.01.2020, 12:50:01
Post #3





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




@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


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

"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

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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:39