запросы с вложенными массивами mysql

Итак, я создаю этот CMS,

Он использует основные страницы и подстраницы (до бесконечного уровня)

Обычно я делал (имейте в виду, это пример):

function getPages($parent_id = 0)
{
$data = mysql("select * from pages WHERE parent_id=$parent_id");
if($data)
{
for($i=0; $i < count($data); $i++)
{
$data[$i]['subpages'] = getPages($data[$i]['id'];
}
}

return $data;
}

Теперь я хочу сделать что-то подобное в одном запросе, где я выберу все подстраницы со страницы до бесконечного уровня и хочу, чтобы он возвращался как подмассивы, а не перезаписывал основные данные (из-за имен столбцов).

Имя таблицы одинаково (страницы) для обеих главных страниц и своих собственных подстраниц.

состав:

`id` int(11) NOT NULL,
`parent_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL,
`location_id` int(11) NOT NULL,
`order` int(11) NOT NULL,
`active` tinyint(1) NOT NULL,
`follow` tinyint(1) NOT NULL,
`title` varchar(255) NOT NULL,
`sub_title` varchar(255) NOT NULL,
`page_title` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`content` text NOT NULL,
`seo_tags` varchar(255) NOT NULL,

-1

Решение

<?
// Filling $data for the example. You can replace following lines by
// $data = mysql("select * from pages");

$data = array(
array("id" => 1, "name" => "a", "parent_id" => 0 ),
array("id" => 2, "name" => "b", "parent_id" => 1 ),
array("id" => 3, "name" => "c", "parent_id" => 2 ),
array("id" => 4, "name" => "d1", "parent_id" => 3 ),
array("id" => 5, "name" => "d2", "parent_id" => 3 )
);

function getPages($parent_id = 0)
{
global $data;
$result = array();
$resultSize = 0;
if($data)
{
$countData = count($data);
for($i=0; $i < $countData; $i++)
{
if ($data[$i]["parent_id"] == $parent_id) {
$result[$resultSize] = $data[$i];
$subpage = getPages($data[$i]["id"]);
if (!empty($subpage)) {
$result[$resultSize]["subpages"] = $subpage;
}
$resultSize++;
}
}
}

return $result;
}

print_r(getPages(0));

?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]