Mamy takie tabele:
transaction - tabela z transakcjami
transaction_share - w jednej transakcji może brać udział kilku klientów i mają różny udział np. 60:40
contact - dane klientów
Potrzebuję wyświetlić listę transakcji, przy czym w jednej komórce potrzebuję wyświetlić listę klientów biorących w niej udział. Czyli potrzebuję imię i nazwisko oraz id klienta (do podlinkowania). Z oczywistych przyczyn nie mogę w pętli pobierać osobno danych klienta. Moje okrojone zapytanie wygląda tak:
SELECT t.id, clients
FROM transaction as t
INNER JOIN
(
SELECT
ts.transaction_id,
GROUP_CONCAT(CONCAT(IFNULL(c.last_name, ''), ' ', IFNULL(c.first_name, ''))) AS clients
FROM transaction_share AS ts
LEFT JOIN contact AS c ON c.contact_id = ts.contact_id
WHERE ts.deleted != 1
GROUP BY ts.transaction_id
) AS ts ON ts.transaction_id = t.id
Oczywiście pobiera ono samo imię i nazwisko i to oddzielone przecinkami. Do tej pory nie było problemu, bo wyświetlenie wartości clients
wystarczyło. Problem się pojawił, ponieważ musze każdego klienta podlinkowac.
Jedynym rozwiązaniem jakie widzę jest dodanie do CONCAT
id klienta i później zrobienie explode
w widoku
GROUP_CONCAT(CONCAT(c.contact_id, ':', IFNULL(c.last_name, ''), ' ', IFNULL(c.first_name, '')))
po przecinku - żeby dostać pojedyńczego klienta - oraz po dwukropku - żeby dostać atrybuty danego klienta w formie tablicy.
Wydaje mi się to bardzo brzydkie rozwiązanie. Czy jest jakieś inne?