Masz relacje wiele do wiele więc powinieneś mieć jeszcze dodatkową tabelę, struktura powinna wyglądać jakoś tak:
TABELA 1
id_tab1, imie i nazwisko, numer, adres, telefon
TABELA 2
id_tab2, nazwa
TABELA 3
id_tab1, id_tab2, ilosc
Korzyści z tego płynące:
- zoptymalizowanie (zmniejszenie rozmiaru) bazy danych
- łatwiejsze zapytania szczególnie to z pierwszego posta
- spójność danych, łatwiejsze przetwarzanie danych
Algorytm rozwiazania:
"SELECT t1.imie, t1.nazwisko, ".[b]generujPivot() [/b]."
FROM tabela1 t1 LEFT JOIN tabela3 t3 ON t3.id_tab1 = t1.id_tab1
LEFT JOIN tabela2 t2 ON t2.id_tab2 = t3.tab_2
GROUP BY t1.id_tab1, t1.imie, t1.nazwisko"
pobierz, plaintext
function generujPivot()
{
// $tablica = tablica wszystkich wartosci z tabeli t3
// coś w stylu:
$result = $result = mysql_query("SELECT * FROM tabela3"); $tablica[] = $row;
}
// $kolumna = klucz obcy z tabeli t3 do t2 w tym przypadku t3.id_tab2
$kolumna = "t3.id_tab2";
// $wartosc = wyswietlana wartość w tabeli wynikowej
$wartosc = "t2.nazwa";
$zapytanie = '';
for ($i = 0; $i < count($tablica); $i++) { $zapytanie .= "max(case when $kolumna = {$tablica[$i]["id"]}
then $wartosc end) AS `{$tablica[$i]["nazwa"]}`, ";
}
return rtrim($zapytanie, ', '); }