Na twoim miejscu to
Stworzył bym osobną tabele "pola" i do niej dodał kolumny
pole_id, kategoria_id(czyli tutaj np. księgarnia), nazwa_pola
Następnie drugą tabele wartości pól
value_id, pole_id, value_value
I wtedy dołączyłbym główną tabele z tymi tabelami poprzez kategoria_id i pole_id,
zgrupował je np. GROUP_CONCAT() ponieważ obie te tabele zwrócą więcej rekordów niż 1
explode i jazda dalej...
Albo też bez grupowania... wystarczy użyć tablic
Takie zapytanie zwróciło by ci więcej rekordów niż 1
to możesz to w łatwy sposób powsadzać do tablic
Sprawdzasz czy tablica o id_kategorii istnieje czyli
if(!isset($product[id_kategorii]))
jeśli nie istnieje to tworzysz taką i w niej zagnierzdżasz informację o produkcie
następnie w tej samej tablicy tworzysz drugą tablice "pola";
i wsadzasz tam informacje o polach...
gdy już drugie obkrążenie poleci to ominie tworzenie nowej tablicy ponieważ takowa o tym indexie już istnieje
i następnie pakujesz informacje o polach do niej, wytłumacze to obrazowo.
!isset{
array[$pro_id] |product name => $name| product_id => $id |itp... | pola => array(i tutaj pola w tej tablicy);
}else{
a tutaj juz pomijasz tworzenie tablicy i tylko pakujesz to tak
array[$pro_id][pola][] = array(...)
}
No i w taki sposób otrzymujesz wszystkie pola przypisane do przedmiotów...
Później żeby wyświetlić te pola potrzebujesz tylko zagnieździć pętle foreach w drugiej pętli foreach czyli
foreach($pro as $pp) {
foreach($pp[pola] as $pola){
no i tutaj wyswietlasz pola do niej
}
}
P.S wejdź sobie na bloga nospora
http://www.nospor.pl o tam ma gdzieś podobny przykład wytłumaczony od a-z
Mam nadzieje że pomogłem