Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Pobieranie rekordów z dwóch tabel
Forum PHP.pl > Forum > Przedszkole
krzywy36
w bazie danych posiadam tabele users, roles i roles_users (kohana). Da się jednym zapytaniem pobrać rekordy z dwóch tabel tak abym otrzymał wynik: tablica z danymi usera i w niej druga tablica z id ról które posiada dany user? Zaprezentuje bardziej "obrazowo":
tabele w bazie (struktura):
-users (id, nick, haslo, email, imie, nazwisko...)
-roles (id, nazwa, opis)
-roles_users (role_id, user_id) // jakies przykladowe pola

chcę przy zwracaniu wyniku zapytania otrzymać coś takiego:
  1. (
  2. [id] = 1
  3. [nick] = przykladowy_nick
  4. [haslo] = przykladowe_haslo
  5. ...
  6. [roles] = Array
  7. (
  8. [0] = 1
  9. [0] = 2
  10. [0] = 5 // 1, 2, 5 to id ról które posiada dany user z tabeli roles_users
  11. )
  12. )

przy zapytaniu:
Kod
SELECT * FROM users JOIN roles_users ON user_id = users.id

otrzymuje coś takiego:
  1. (
  2. [0] => Array
  3. (
  4. [id] => 5
  5. [email] => testowy@gmail.com
  6. [username] => testowy
  7. [password] => xxx
  8. [user_id] => 5
  9. [role_id] => 1
  10. )
  11.  
  12. [1] => Array
  13. (
  14. [id] => 4
  15. [email] => xxx@gmail.com
  16. [username] => xxx
  17. [password] => xxx2
  18. [user_id] => 4
  19. [role_id] => 1
  20. )
  21.  
  22. [2] => Array
  23. (
  24. [id] => 4
  25. [email] => xxx@gmail.com
  26. [username] => xxx
  27. [password] => xxx2
  28. [user_id] => 4
  29. [role_id] => 2
  30. )
  31.  
  32. )
skowron-line
GROUP_CONCAT
krzywy36
o to mi chodziło, tylko mam mały problem z skonstruowaniem zapytania:
[MYSQL] pobierz, plaintext
[MYSQL] pobierz, plaintext

powyższe zwraca tylko jednego (najnowszego usera) i w polu roles zwraca wszystkie role_id z tabeli roles_users (nawet te nie należące do danego usera), wskaże ktoś błąd?

Edit: coś sie spsuło z znacznikiem mysql
Kod
SELECT users.*, GROUP_CONCAT(roles_users.role_id SEPARATOR ',') AS roles FROM users JOIN roles_users ON roles_users.user_id = users.id
skowron-line
Bo grupowanie by się jeszcze przydało pod id_user
krzywy36
dodałem GROUP BY users.id, działa, ale mógłby ktoś wytłumaczyć co robi "GROUP BY"? snitch.gif
skowron-line
GROUP BY tworzy grupy elementów smile.gif A poważnie to manual bratku jest od takich rzeczy
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.