我正在开发一个三向树,我的表结构是
+----+---------+-----------------------+
| id | user_id | leg_type|parent_user_id
+----+---------+-----------------------+
| 1 | 1011 | M |1000 |
| 2 | 1012 | L |1000 |
| 3 | 1013 | R |1000 |
| 4 | 1014 | M |1011 |
| 5 | 1015 | R |1011 |
| 6 | 1016 | M |1012 |
+----+---------+-----------------------+
现在我想搜索一个特定的ID,比如说parent_user_id(1000)我怎样才能找到M,L和R中的孩子数
例如1000(M)= 1011,1014,1015 {3} 1000(L)= 1012,1016 {2} 1000(R)= 1013 {1}
Array(
"1000"=>Array(
"M" => 3
"L" => 2
"R" => 1
)
)
任何优化的解决方案。我尝试了一切但不值得。
编辑:图片可视化
答案 0 :(得分:0)
我对蛋糕php不太了解,但如果是查询,可以尝试以下
我已将测试作为您的表名
select `t1`.`parent_user_id`,`t1`.`leg_type`,count(`t1`.`leg_type`) as `leg_type_count`
from `test` `t1`
inner join `test` `t2` on `t2`.`leg_type` = `t1`.`leg_type`
AND `t1`.`parent_user_id` = `t2`.`parent_user_id`
WHERE `t2`.`parent_user_id` = 1011
group by `t1`.`leg_type`
您可以在此处查看http://sqlfiddle.com/#!2/2e9f0/7
答案 1 :(得分:0)
尝试对子项进行查找,然后使用Set :: combine来排序结果。
$array = $this->User->find('all', array('conditions' => array(
'User.parent_user_id' => 1000)));
然后做:
$array = Set::combine($array, '{n}.User.leg_type', '{n}.User.id', '{n}.User.parent_user_id');