Php 存储类别和子类别时,可能会出现无限子和#x27;s、 以及一个函数,用于将它们从MYSQL返回到JSON
我目前的职能:Php 存储类别和子类别时,可能会出现无限子和#x27;s、 以及一个函数,用于将它们从MYSQL返回到JSON,php,mysql,json,Php,Mysql,Json,我目前的职能: $categories = array(); $db -> new PDO(connect); foreach($db->query('SELECT * FROM categories') as $row) { $category = array(); array_push($category, $row['categoryID']); foreach($db->query("SELECT * FROM subcategorie
$categories = array();
$db -> new PDO(connect);
foreach($db->query('SELECT * FROM categories') as $row) {
$category = array();
array_push($category, $row['categoryID']);
foreach($db->query("SELECT * FROM subcategories WHERE categoryID = {$row['categoryID']} ") as $row2)
{
if ($row2["subcatparentID"] == null) {
$category[$row['categoryID']][] = $row2['subcatID'];
}
//Here I need to get all the subcats with parent subcats, and
//then I need to add the subcategory to $category finding the parent subcategory
//mentioned before. So, I need a infinite multi-dimensional search function or something..
//Plus, I need to use a repeating while loop to make sure all subcategories with
//parents are added into the array, because if 14 is linked to 11 and 11 is linked to
}
$categories[] = $category;
}
return json_encode($categories);
这是我目前唯一的想法。如果父子类别可以是任何维度,我如何找到它?例如,子类别11链接到12,12链接到14,14链接到13,我将有$category[13][14][12][11]
我的表格结构如下:
{"1":[41[43,42[45, 44]]],"2":[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"3":[56,57,58,59,60,61],"4":[62,63,64],"5":[1,2,3,4,5,6,21[22,23]]}
表“子类别”:子类别ID、类别ID、名称、子类别ID
表“类别”:categoryID,name//这些是主要类别
作为JSON格式的回报,我希望如下所示:
{"1":[41[43,42[45, 44]]],"2":[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"3":[56,57,58,59,60,61],"4":[62,63,64],"5":[1,2,3,4,5,6,21[22,23]]}
尽管这似乎不适用于JSON.parse,但奇怪的是。一种递归方法的想法:-
<?php
$categories = array();
$db -> new PDO(connect);
foreach($db->query('SELECT * FROM categories') as $row)
{
$categories[$row['categoryID']] = get_sub_categories($db, $row['categoryID']);
}
return json_encode($categories);
function get_sub_categories($db, $parent_category)
{
$return_categories = array();
foreach($db->query("SELECT * FROM subcategories WHERE categoryID = $parent_category ") as $row2)
{
$return_categories[$row2['subcatID']] = get_sub_categories($db, $row2['subcatID']);
}
return $return_categories;
}
?>
未测试,但这将为您提供一个数组,其中键是类别,值是该类别下的类别数组(每个类别可以是数组,等等)
编辑-仍然不是100%,但通过循环执行此操作,但从树的底部开始,使用array_unshift将子类别预先添加到每个类别的数组中
这取决于当子类别是该类别下的最高类别时,Subcategory ID设置为0,但如果其他内容很容易更改
未经测试
<?php
$categories = array();
$db -> new PDO(connect);
$categories = array();
foreach($db->query('SELECT categories.categoryID, a.subcatID, a.subcatparentID
FROM categories
INNER JOIN subcategories a ON categories.categoryID = a.categoryID
LEFT OUTER JOIN subcategories b ON a.categoryID = b.categoryID AND a.subcatID = b.subcatparentID
WHERE b.subcatID IS NULL
') as $row)
{
$categories[$row['categoryID']] = array();
$parent = $row['subcatparentID']
while($parent != 0)
{
// following should only get a single row
foreach($db->query("SELECT subcatID, subcatparentID FROM subcategories WHERE categoryID = $row['categoryID'] AND subcatID = $parent") as $row2)
{
array_unshift($categories[$row['categoryID']], $row2['subcatID']);
$parent = $row2['subcatparentID']
}
}
}
?>
MySQL不支持递归查询。这意味着您的主要选择是设置递归mysql过程以返回详细信息,在您选择的脚本语言中使用递归函数以重复执行SQL,或者重新设计数据库以使用嵌套的set方法。哪种方法最好取决于具体情况(即,嵌套集方法读取速度非常快,但更新速度较慢),无法在多维数组中进行搜索?在使用您正在使用的邻接集模型的单个查询中,这是不可能的。您需要执行递归查询(这可能需要很长时间)。遗憾的是,我不理解这一点。您没有使用parentID?这是递归函数获取类别的子记录及其子记录等的基本示例。但我不确定你们的桌子是如何构造的。如果您可以使用表结构和一些示例数据修改您的原始帖子,以及您希望从这些示例数据中输出的内容,我可以尝试提出一些更符合您要求的内容。我希望javascript使用一个数组,如类别[1,2,3,4,5,6,7,8,9,10],其中类别[2][29,30,31,34,35]链接,然后以类别[2][35][32][33]为例。我用表格格式编辑了原始帖子。那么,当一位家长有两个直系子女时,你会怎么做?它是否为每个可能的父/子链提供了完整的数组?请尝试一下。可能格式不太正确,但应该很接近。