|
|
|
| Тема избита, но решить не получается уже второй день.
В базе имеется id, id_parent.
10 - 1
11 - 10
12 - 10
13 - 12
14 - 12
Необходимо составить массив и вывести в виде дерева.
Вариант 1.
$sSQL = "SELECT * FROM ". $this->_table_assembly_activity;
if($chapter_id) {
$sSQL .= " WHERE CHAPTER_ID = ".$chapter_id;
}
if($parent_id != null) {
$sSQL .= " AND PARENT_ASSEMBLY_ACTIVITY_ID = ".$parent_id;
}
$res = mysql_query($sSQL);
if(mysql_num_rows($res) > 0)
{
$i = 0;
while($fetch = mysql_fetch_array($res))
{
$arrObjActivitySub[$i]["activity_id"] = $fetch['ASSEMBLY_ACTIVITY_ID'];
$arrObjActivitySub[$i]["activity__parent_id"] = $fetch['PARENT_ASSEMBLY_ACTIVITY_ID'];
$i++;
}
for($i = 0; $i < count($arrObjActivitySub); $i++) {
}
}
return $arrObjActivitySub;
|
вывод:
Array ( [0] => Array ( [activity_id] => 10 [activity__parent_id] => 1 ) )
|
Вариант 2
$table = $this->_table_assembly_activity;
$sSQL = "SELECT * FROM ". $table;
if($chapter_id) {
$sSQL .= " WHERE CHAPTER_ID = ".$chapter_id;
}
if($parent_id) {
$sSQL .= " AND PARENT_ASSEMBLY_ACTIVITY_ID = ".$parent_id;
}
$res = mysql_query($sSQL);
$objActivity = mysql_fetch_assoc($res);
if(!$objActivityRow && ($activity_id != 1))
{
return null;
}
$formdata = array(
"assemply_activity_id" => $objActivity["ASSEMBLY_ACTIVITY_ID"],
"parent_assemply_activity_id" => $objActivity["PARENT_ASSEMBLY_ACTIVITY_ID"],
"assemply_activity_id_customer_edit" => $objActivity["PARENT_ASSEMBLY_ACTIVITY_ID_CUSTOMER_EDIT"],
"activity_sequence" => $objActivity["ACTIVITY_SEQUENCE"],
"activity_sequence_customer_edit" => $objActivity["ACTIVITY_SEQUENCE_CUSTOMER_EDIT"],
"description" => $objActivity["DESCRIPTION"],
"description_customer_edit" => $objActivity["DESCTIPTION_CUSTOMER_EDIT"],
"hint_description" => $objActivity["HINT_DESCRIPTION"],
"hint_description_customer_edit" => $objActivity["HINT_DESCTIPTION_CUSTOMER_EDIT"],
"encoded_viewpoint_name" => $objActivity["ENCODED_VIEWPOINT_NAME"],
"name" => $objActivity["NAME"],
"name_customer_edit" => $objActivity["NAME_CUSTOMER_EDIT"],
"chapter_id" => $objActivity["CHAPTER_ID"],
"notes" => $objActivity["NOTES"]
);
$Activity = new Activity($formdata);
$Activity->assemply_activity_id = $activity_id;
$sSQL2 = "SELECT * FROM ". $table;
if($chapter_id) {
$sSQL2 .= " WHERE CHAPTER_ID = ".$chapter_id;
}
$sSQL2 .= " AND PARENT_ASSEMBLY_ACTIVITY_ID = ".$Activity->assemply_activity_id;
$res2 = mysql_query($sSQL2);
$objActivitySubs = mysql_fetch_array($res2);
if(!$res2)
{
return $Activity;
}
foreach($objActivitySubs as $row)
{
$objActivity = $this->getCategoryWithSubs(1, $row["ASSEMBLY_ACTIVITY_ID"]);
$Activity->subactives[] = $objActivity;
}
return $Activity;
|
Вывод зацикливается и безрезультатно. | |
|
|
|
|
|
|
|
для: Денис
(23.01.2007 в 17:05)
| | что-то рекурсии у Вас не наблюдается... | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2007 в 17:47)
| | Нашел ответ на свой вопрос. Данные выбираются, но есть один недочет. Данные составляются в массив такого вида:
Array
(
[0] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 1
[activeID] => 18
[activeParentID] => 1
[level] => 0
)
[1] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 2
[activeID] => 19
[activeParentID] => 18
[level] => 1
)
[2] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 4
[activeID] => 21
[activeParentID] => 19
[level] => 2
)
...........
Т.е. упорядоченного вида. Я же хотел, чтобы массив имел вложенность, т.е. например Array([10] => Array([0] => 18) [1] => Array([0] => 11 [1] => 12 [2] => 3) [11] => Array([0] => 21)). Ниже пример скрипта. Подскажите, как его видоизменить, чтобы получить массив нужного вида?
function CatList($chapter_id, $activity_id, $level)
{
$table = $this->_table_assembly_activity;
$sSQL = "SELECT
tc.CHAPTER_ID, tc.CHAPTER_NAME,
ta.DESCRIPTION descr, ta.ASSEMBLY_ACTIVITY_ID as activeID, ta.PARENT_ASSEMBLY_ACTIVITY_ID as activeParentID
FROM ". $table." ta,
".$this->_table_chapter." tc";
if($chapter_id) {
$sSQL .= " WHERE ta.CHAPTER_ID = tc.CHAPTER_ID AND ta.CHAPTER_ID = ".$chapter_id;
}
if($activity_id) {
$sSQL .= " AND ta.PARENT_ASSEMBLY_ACTIVITY_ID = ".$activity_id;
}
$a = array();
$res = mysql_query($sSQL);
while ($row = mysql_fetch_assoc($res) )
{
$row['level'] = $level;
$a[] = $row;
$b = $this->CatList(1, $row['activeID'],$level+1);
for ($j=0; $j<count($b); $j++)
{
$a[] = $b[$j];
}
}
return $a;
}
|
Заранее благодарен. С уважением, Денис | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2007 в 17:47)
| | Нашел ответ на свой вопрос. Данные выбираются, но есть один недочет. Данные составляются в массив такого вида:
Array
(
[0] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 1
[activeID] => 18
[activeParentID] => 1
[level] => 0
)
[1] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 2
[activeID] => 19
[activeParentID] => 18
[level] => 1
)
[2] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 4
[activeID] => 21
[activeParentID] => 19
[level] => 2
)
...........
Т.е. упорядоченного вида. Я же хотел, чтобы массив имел вложенность, т.е. например Array([10] => Array([0] => 18) [1] => Array([0] => 11 [1] => 12 [2] => 3) [11] => Array([0] => 21)). Ниже пример скрипта. Подскажите, как его видоизменить, чтобы получить массив нужного вида?
function CatList($chapter_id, $activity_id, $level)
{
$table = $this->_table_assembly_activity;
$sSQL = "SELECT
tc.CHAPTER_ID, tc.CHAPTER_NAME,
ta.DESCRIPTION descr, ta.ASSEMBLY_ACTIVITY_ID as activeID, ta.PARENT_ASSEMBLY_ACTIVITY_ID as activeParentID
FROM ". $table." ta,
".$this->_table_chapter." tc";
if($chapter_id) {
$sSQL .= " WHERE ta.CHAPTER_ID = tc.CHAPTER_ID AND ta.CHAPTER_ID = ".$chapter_id;
}
if($activity_id) {
$sSQL .= " AND ta.PARENT_ASSEMBLY_ACTIVITY_ID = ".$activity_id;
}
$a = array();
$res = mysql_query($sSQL);
while ($row = mysql_fetch_assoc($res) )
{
$row['level'] = $level;
$a[] = $row;
$b = $this->CatList(1, $row['activeID'],$level+1);
for ($j=0; $j<count($b); $j++)
{
$a[] = $b[$j];
}
}
return $a;
}
|
Заранее благодарен. С уважением, Денис | |
|
|
|
|
|
|
|
для: Денис
(24.01.2007 в 19:28)
| | Я бы вам с удовольствием помог, но не могли бы вы как бы привести пример что ищите с примером желаемого массива в результате
а то не понимаю... | |
|
|
|
|
|
|
|
для: bronenos
(24.01.2007 в 23:29)
| | Пример того, что у меня получилось:
rray
(
[0] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 1
[activeID] => 18
[activeParentID] => 1
[level] => 0
)
[1] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 2
[activeID] => 19
[activeParentID] => 18
[level] => 1
)
[2] => Array
(
[CHAPTER_ID] => 1
[CHAPTER_NAME] => Testing Activity Data Set
[descr] => Active 4
[activeID] => 21
[activeParentID] => 19
[level] => 2
)
|
Пример того, что хотел получить%
Array
(
[--menu1] => 1
[--menu2] => Array
(
[----menu2.1] => 1
[----menu2.2] => Array
(
[------menu2.2.1] => 1
[------menu2.2.2] => 1
[------menu2.2.3] => 1
)
[----menu2.3] => 1
[----menu2.4] => 1
)
[--menu3] => 1
[--menu4] => 1
)
|
Заранее спасибо. | |
|
|
|