C'è un modo più semplice per gestire questa problematica. Di solito non vincolo una categoria ad una sola sottocategoria ma ad infinite....
ecco un esempio:
tabella category
category_id | parent_id | nome categoria
1 | 0 | Programmazione
2 | 1 | PHP
3 | 1 | ASP
4 | 0 | Cucina
5 | 0 | Giardinaggio
6 | 0 | Letteratura
7 | 6 | Italiana
Codice PHP:
//istanza oggetto.....
//utilizzo metodo prelievo categorie
$cat = $this->getCategories(0);
//prelievo categorie
public function getCategories($parent_id = 0) {
$categories= array();
$query = "SELECT * FROM category WHERE parent_id = '" . (int)$parent_id;
//esecuzione query
//ciclo elementi
foreach ($row as $result) {
$categories = array( '
category_id' => $result['category_id'],
'name' => $this->getPath($result['category_id'])), ); //ricorsione
$categories = array_merge($categories, $this->getCategories($result['category_id'])); }
return $categories;
}
public function getPath($category_id) {
$query = "SELECT name, parent_id FROM category WHERE category_id = '" . (int)$category_id ;
//esecuzione query
//prelevo elemento
if ($row['parent_id']) {
//ricorsione
return $this->getPath($row['parent_id']) .'->' . $row['name'];
} else {
return $row['name'];
}
}
in questo esempio la matrice $cat conterrà
Programmazione
Programmazione -> PHP
Programmazione -> ASP
Cucina
Giardinaggio
Letteratura
Letteratura -> Italiana
facilmente scandibile per la tua select...
per chiarimenti puoi leggere questo utile tutorial riguardante
http://database.html.it/articoli/leg...e-su-database/
Adjacency model