Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wartości pól jako nazwy kolumn tabeli wynikowej
Forum PHP.pl > Forum > Bazy danych > MySQL
mpowroznik
Witam, szanownych forumowiczów...

Próbuję rozwiązać następujący problem

Mam 3 tabele powiązane ze sobą
  1. Tabela mpo
  2. +---------------+
  3. | id |
  4. +---------------+
  5. | id_user |
  6. +---------------+
  7. | id_parent |
  8. +---------------+

  1. Tabela mpo_wart
  2. +---------------+
  3. | id |
  4. +---------------+
  5. | id_mpo |
  6. +---------------+
  7. | id_kol |
  8. +---------------+
  9. | wart |
  10. +---------------+

  1. Tabela mpo_kol
  2. +---------------+
  3. | id |
  4. +---------------+
  5. | nazwa |
  6. +---------------+


W tabeli mpo znajduje się id_user, który stanowi identyfikator użytkownika (pobierany z joomli), oraz id_parent - identyfikator użytkownika nadrzędnego (tylko 1 poziom bez żadnych rekurencji)

W tabeli mpo_kol znajdują się nazwy pól, które administrator systemu może dodawać (imię, nazwisko, telefon, adres)

W tabeli mpo_wart znajdują się wartości

Zawartość poszczególnych tabel
  1. Tablea mpo
  2. +-----+----------+-----------+
  3. | id | id_user | id_parent |
  4. +-----+----------+-----------+
  5. | 1 | 62 | |
  6. +-----+----------+-----------+
  7. | 2 | 77 | |
  8. +-----+----------+-----------+


  1. Tabela mpo_kol
  2. +----+-----------------------+
  3. | id | nazwa |
  4. +----+-----------------------+
  5. | 1 | Imię |
  6. +----+-----------------------+
  7. | 2 | Nazwisko |
  8. +----+-----------------------+
  9. | 3 | Telefon |
  10. +----+-----------------------+


  1. Tabela mpo_wart
  2. +----+---------+---------+-------------+
  3. | id | id_mpo | id_kol | wart |
  4. +----+---------+---------+-------------+
  5. | 1 | 1 | 1 | Jan |
  6. +----+---------+---------+-------------+
  7. | 2 | 1 | 2 | Kowalski |
  8. +----+---------+---------+-------------+
  9. | 3 | 1 | 3 | 606 123 321 |
  10. +----+---------+---------+-------------+
  11. | 4 | 2 | 1 | Kaziu |
  12. +----+---------+---------+-------------+
  13. | 5 | 2 | 2 | Nowak |
  14. +----+---------+---------+-------------+
  15. | 6 | 2 | 3 | 505 132 321 |
  16. +----+---------+---------+-------------+


Pragnę uzyskać wynik w postaci
  1. +---------+-------------------+----------------------+-----------------+
  2. | id_user | imię | nazwisko | telefon |
  3. +---------+-------------------+----------------------+-----------------+
  4. | 62 | Jan | Kowalski | 606 123 321 |
  5. +---------+-------------------+----------------------+-----------------+
  6. | 77 | Kaziu | Nowak | 505 132 321 |
  7. +---------+-------------------+----------------------+-----------------+


poprzez wykonanie takiego zpaytania
  1. SELECT `mpo`.`id_user`, `k`.`nazwa`, `w`.`wart` FROM `mpo` LEFT JOIN `mpo_wart` AS `w` ON `w`.`id_mpo`=`mpo`.`id` LEFT JOIN `mpo_kol` AS `k` ON `k`.`id`=`w`.`id_kol`


otrzymuje następujący wynik
  1. +----------+------------+--------------+
  2. | id_user | nazwa | wart |
  3. +----------+------------+--------------+
  4. | 62 | imię | Jan |
  5. +----------+------------+--------------+
  6. | 62 | nazwisko | Kowalski |
  7. +----------+------------+--------------+
  8. | 62 | telefon | 606 123 321 |
  9. +----------+------------+--------------+
  10. | 77 | imię | Kaziu |
  11. +----------+------------+--------------+
  12. | 77 | nazwisko | Nowak |
  13. +----------+------------+--------------+
  14. | 77 | telefon | 505 132 321 |
  15. +----------+------------+--------------+


Z góry dzięki za pomoc.
wookieb
Musisz utworzyć tabelę tymczasową i tam wrzucać kolumny, bawić się z group_concat, albo coś podobnego http://www.dijexi.com/2009/07/mysql-transp...ow-into-column/. Jak już decydujesz się na model EAV to teraz cierp.
Poza tym zawsze pozostaje opcja zrobienia tego w PHP i cachowania.
mpowroznik
Dzięki za odpowiedź...

Temat wymaga ode mnie głębszego przeanalizowania, abym go mógł wdrożyć. Teraz zależy mi na czasie więc, zastosuje klasyczne rozwiązanie, ze statyczną ilością kolumn w tabeli.

Znalazłem w końcu podobny POST

Pozdrawiam,
Marcin
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.