Cześć, od kilku dni próbuję rozwiązać problem z łączeniem tabel. Otóż jedna z tabel w SQLu (możemy ją nazwać 'events', przechowuje informacje o wydarzeniu, jej dacie, szczegółach itp.) zawiera kolumnę z id klientów, tylko jest ona przechowywana jako tablica JSON. Uczestników dla danego wydarzenia z tabeli 'events' może być >=1 dlatego nie mogę przypisać po prostu do jednego wydarzenia jednego id uczestnika. I teraz mam tabelę 'clients', która przechowuje dane personalne uczestników.
Pisząc zapytanie wyszukujące konkretne wydarzenie z tabeli 'events' i łącząc je z danymi kilentów z tabeli 'clients' pojawia się problem. INNER JOIN łączy po konkretnej wartości, ale czy da się zrobić, aby wypisało dane wydarzenie, jeśli jakieś id klienta tylko znajduje się w danej tabelce.
Taki byłby mniej więcej mój tok rozumowania:
SELECT * FROM events INNER JOIN clients ON clients.client_id = events.client_id
lub
SELECT * FROM events INNER JOIN clients ON clients.client_id = IN JSON_ARRAY(events .client_id)
Znalazłem na necie różne funkcje do JSONa typu json_value(), albo openjson(), ale niezbyt rozwiązywały mój problem.
W teorii mogę wybrać wszystkie wydarzenia które spełniają tam jakieś warunki i w php pobrać kolumnę z tablicą id klientów i za pomocą json_decode() odszyfrować i dać drugie zapytanie z danymi osób po tych wartościach, ale chcę zrobić wyszukiwarkę wydarzeń po imieniu i/lub nazwisku ludzi którzy biorą udział.
Coś takiego mniej więcej:
SELECT * FROM events INNER JOIN clients (jakieś warunki połączenia) WHERE concat(clients.name, ' ', clients.last_name) LIKE '%$input%';
Wiem, że LIKE jest średni do wyszukiwania po tekstach, ale w tej sytuacji jest to nieistotne.
Skracając myśl w wyszukiwarce wpisuję imię i nazwisko osoby, a program wyszukuje mi wydarzenia, na których ten uczestnik był. W wynikach w jednej z komórek, może być np. lista wszystkich uczestników lub coś podobnego.
Ma ktoś może pomysł jak taki problem rozwiązać?
PS. funkcja JSON_CONTAINS() działa fajnie, ale tylko w klauzuli WHERE
PS.2 Ewentualnie jak ktoś ma inny pomysł jak przechowywać kilka wartości do jednego wpisu w bazie