Hola
Tengo problemas cuando intento hacer un JOIN dentro una función recursive. Voy a pasar a describir las tablas primero:
tabla categories:
Código PHP:
CREATE TABLE `categories` (
`CatId` int(10) unsigned NOT NULL auto_increment,
`CatParentId` int(10) unsigned NOT NULL default '0',
`CatOrderSeq` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`CatId`),
KEY `Categories_FKIndex1` (`CatParentId`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;
#
# Dumping data for table `categories`
#
INSERT INTO `categories` VALUES (1, 0, 1);
INSERT INTO `categories` VALUES (2, 0, 2);
INSERT INTO `categories` VALUES (3, 0, 3);
INSERT INTO `categories` VALUES (4, 1, 1);
INSERT INTO `categories` VALUES (6, 1, 2);
INSERT INTO `categories` VALUES (7, 1, 3);
INSERT INTO `categories` VALUES (8, 2, 1);
INSERT INTO `categories` VALUES (9, 2, 2);
tabla: catlang
Código PHP:
CREATE TABLE `catlang` (
`LangId` int(10) unsigned NOT NULL default '0',
`CatId` int(10) unsigned NOT NULL default '0',
`CatLangName` varchar(45) NOT NULL default '',
PRIMARY KEY (`LangId`,`CatId`),
KEY `CatLang_FKIndex1` (`CatId`),
KEY `CatLang_FKIndex2` (`LangId`)
) TYPE=MyISAM;
#
# Dumping data for table `catlang`
#
INSERT INTO `catlang` VALUES (1, 1, 'a');
INSERT INTO `catlang` VALUES (1, 2, 'b');
INSERT INTO `catlang` VALUES (1, 3, 'c');
INSERT INTO `catlang` VALUES (1, 4, 'a1');
INSERT INTO `catlang` VALUES (1, 6, 'a2');
INSERT INTO `catlang` VALUES (1, 7, 'a3');
Bueno, por el momento ignoren la tabla catlang, y concentrense en la primera, cual es usada en mi escript:
Código PHP:
// $parent es el padre de los niños que queremos ver
// $level es incrementado cuando vamos llendo más profundo en el árbol,
// usado para desplegar el árbol de una manera más leíble
function display_children($parent, $level) {
// recuperar todos los "hijos" de el $parent
$result = mysql_query("SELECT CatId FROM categories
WHERE CatParentId ='".$parent."'")or die(mysql_error());
//print "SELECT CatId FROM categories WHERE CatParentId =$parent<br>";
// para desplegar cada hijo
while ($row = mysql_fetch_array($result)) {
// indentar y desplegar el titulo del hijo
echo str_repeat(' ',$level).$row['CatId']."<br/>";
// se llama nuevamente esta función para desplegar el hijo del hijo
display_children($row['CatId'], $level+1);
}
}
display_children('',0);
?>
este codigo me va a desplegar lo siguiente:
1
4
6
7
2
8
9
3
Bueno, hasta aquí todo funciona bien, pero el problema es cuando intento juntar esta tabla con la tabla catlang, no logro juntar los IDs (categories.CatId, catlang.CatId). He intentado con lo siguiente pero no me ha funcionado:
Código PHP:
$result = mysql_query("SELECT categories.CatId, catlang.CatLangName
FROM categories, catlang
WHERE categories.CatId ='".$parent."' AND catlang.CatId ='".$parent."'")or die(mysql_error());
y luego cambio esta liena:
Código PHP:
echo str_repeat(' ',$level).$row['CatId']."<br/>";
por esta otra, para así tomar los textos de la tabla catlang
Código PHP:
echo str_repeat(' ',$level).$row['CatLangName']."<br/>";
Lo que quiero lograr es lo siguiente:
a
a1
a2
a3
b
c
Agradezco cualquier ayuda.
Ratamaster