codice:
-- --------------------------------------------------------
--
-- Table structure for table `categories`
--
CREATE TABLE `categories` (
`id` int(10) NOT NULL auto_increment,
`category` varchar(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `categories`
--
INSERT INTO `categories` (`id`, `category`) VALUES (1, 'category_0'),
(2, 'category_1'),
(3, 'category_2'),
(4, 'category_3');
-- --------------------------------------------------------
--
-- Table structure for table `category_0`
--
CREATE TABLE `category_0` (
`id` int(10) NOT NULL auto_increment,
`category` varchar(100) default NULL,
`parent_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `category_0`
--
INSERT INTO `category_0` (`id`, `category`, `parent_id`) VALUES (1, 'Food', 0),
(2, 'Games', 0);
-- --------------------------------------------------------
--
-- Table structure for table `category_1`
--
CREATE TABLE `category_1` (
`id` int(10) NOT NULL auto_increment,
`category` varchar(100) default NULL,
`parent_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `category_1`
--
INSERT INTO `category_1` (`id`, `category`, `parent_id`) VALUES (1, 'Fruit', 1),
(2, 'Meat', 1),
(3, 'Pac Man', 2);
-- --------------------------------------------------------
--
-- Table structure for table `category_2`
--
CREATE TABLE `category_2` (
`id` int(10) NOT NULL auto_increment,
`category` varchar(100) default NULL,
`parent_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `category_2`
--
INSERT INTO `category_2` (`id`, `category`, `parent_id`) VALUES (1, 'Red', 1),
(2, 'Yellow', 1),
(3, 'Breef', 2),
(4, 'Pork', 2);
-- --------------------------------------------------------
--
-- Table structure for table `category_3`
--
CREATE TABLE `category_3` (
`id` int(10) NOT NULL auto_increment,
`category` varchar(100) default NULL,
`parent_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `category_3`
--
INSERT INTO `category_3` (`id`, `category`, `parent_id`) VALUES (1, 'Cherry', 1),
(2, 'Banana', 2);
codice:
mysql_connect( 'localhost', 'root', '' );
mysql_select_db( 'prove' );
$query = &mysql_unbuffered_query( 'SELECT category FROM categories' );
while( $r = &mysql_fetch_row( $query ) ) {
if( isSet( $newquery ) == false ) {
$newquery = 'SELECT * FROM '.$r[0].'';
$oldr = &$r[0];
}
else {
$newquery .= ' LEFT JOIN '.$r[0].' ON '.$oldr.'.id = '.$r[0].'.parent_id';
$oldr = &$r[0];
}
}
// qui se vuoi fare una prova in phpMyAdmin ti rendi subito
// conto che hai tutta la gerarchia gia' strutturata ...
// echo $newquery; // poi la usi in phpMyAdmin
$TableMapping = 3; // IMPORTANTE
// questa variabile e' fondamentale perche' tramite
// phpMyAdmin o altri devi vedere , in base alle tue tabelle
// ogni quanto esiste quella chiamata categoria, perche' sono tute uguali ( devono esserlo ) ... in questo caso ogni 3
// colonne c'e' la corrispettiva per categoria
$StartMapping = 1; // IMPORTANTE
// questa invece indica qual'e' la prima colonna contenente le informazioni per categoria
$queryTree = Array();
$globalKeys = '';
$query = &mysql_unbuffered_query( $newquery );
while( $r = &mysql_fetch_row( $query ) ) {
$a = $StartMapping;
$arrayKeys = '$queryTree';
while( isSet( $r[$a] ) ) {
$arrayKeys .= '[\\''.$r[$a].'\\']';
$a+= $TableMapping;
}
$globalKeys .= $arrayKeys.' = Array();';
}
eval( $globalKeys );
echo '<pre>';
var_dump( $queryTree );
echo '</pre>';
2 query di cui una irrisoria ( quella per i nomi delle sotto tabelle ) ed una sola query per tutti i risultati che vuoi .