Здесь я запускаю два запроса, вызывая одну функцию.
$category = [];
$sub_category = [];
$query_parent_category = "select name from category where parent_id = 0";
$query_child_category="select name from category where parent_id = 1";
$category = $this->runSelectQuery($query_parent_categoty);
$sub_category = $this->runSelectQuery($query_child_categoty);
return array($category,$sub_category);
функция runSelectQuery
как…
public function runSelectQuery($sql) {
$result = mysqli_query($this->con, $sql);
$listinfdata = array();
while ($row = mysqli_fetch_assoc($result)) {
$listinfdata[] = $row;
}
return $listinfdata;
}
но это не оптимизация lool .. мне нужно, чтобы два массива в одном вызове функции .. что означает $category[]
а также $sub_category[]
в одном массиве .. результат хотел бы быть
Array
(
[0] => Array
(
[name] => MEN
[subcat] => Array
(
[0] => Jeans
[1] => Shirts
[2] => T-shirts
[3] => Chinos
[4] => Blazers
[5] => Night Wear
)
)
)
и так далее ..
Больше ответа здесь …
Как насчет, если у вас более 1 родительской категории
как это
Используйте этот запрос
SELECT `parent_category`.`id`, `parent_category`.`name` as `parent_category`, `child_category`.`name` as `child_category` FROM `category` `parent_category` join `category` `child_category` on `parent_category`.`id` = `child_category`.`parent_id`
Этот запрос дает такой результат
Сначала сгруппировать вашу категорию
объявите переменную, которая содержит parent_id вашего $row
$prev_parent = null;
пусть это будет как ноль
затем
в то время как цикл
Создать 3 условия
Первое условие: проверьте, если $prev_parent
пусто, тогда создайте свою первую категорию
if ($prev_parent == null) {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
}
Это условие создаст что-то вроде этого
Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1'
)
)
);
Второе условие: проверьте, если $row['id']
или parent_id совпадает с $ prev_parent, который является вашей предыдущей родительской идентификационной категорией
Если это соответствует этому условию, просто вставьте подкатегорию в последние подкатегории последней родительской категории.
`sizeof($listinfdata)-1` since array always started at index 0
Сделай это
$prev_parent = $row['id'];
$listinfdata[sizeof($listinfdata)-1]['subcat'][] = $row['child_category'];
Это условие создаст что-то вроде этого
Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1',
[1] => 'Child Category 2'
)
)
);
Последнее условие else
означает, что если $prev_parent
не пустой, но текущая родительская_категория не совпадает с
$prev_parent
вставить другую родительскую категорию с ее первой подкатегорией
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
Это условие создаст что-то вроде этого
Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1',
[1] => 'Child Category 2'
)
),
[1] => Array
(
[name] => 'Parent Category 2'
[subcat] => Array
(
[0] => 'Child Category 1',
)
)
);
Итак, ваш код будет таким
<?php
$category = [];
$sub_category = [];
$query_category = "SELECT `parent_category`.`id`, `parent_category`.`name` as `parent_category`, `child_category`.`name` as `child_category` FROM `category` `parent_category` join `category` `child_category` on `parent_category`.`id` = `child_category`.`parent_id`";
$sub_category = $this->runSelectQuery($query_category);
return array($sub_category);function `runSelectQuery` is like...
public function runSelectQuery($sql) {
$result = mysqli_query($this->con, $sql);
$listinfdata = array();
$prev_parent = null;
while ($row = mysqli_fetch_assoc($result)) {
$category = null;
if ($prev_parent == null) {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
} else if ($row['id'] == $prev_parent) {
$prev_parent = $row['id'];
$listinfdata[sizeof($listinfdata)-1]['subcat'][] = $row['child_category'];
} else {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
}
}
return $listinfdata;
}
И результат такой
Для этого вы можете просто изменить запрос, используя оператор «ИЛИ».
$category = [];
$query_parent_categoty = "select name from category where parent_id = 0 OR parent_id = 1";
$category = $this->runSelectQuery($query_parent_categoty);
return array($category);
Так же, как прокомментировал @beginner, используя IN
лучше, чем OR
$query = "SELECT name FROM category WHERE parent_id IN (0,1)";
$category = $this->runSelectQuery($query);