我有一个包含2列用户名和领导者
的表格 login_user sponsered_id right_left
test1 admin Right
test2 admin Left
test3 test1 Right
test4 test1 Left
test43 test2 Left
test44 test3 Left
我有一个功能
function display_children($parent, $level) {
// retrieve all children of $parent
$result = mysql_query('SELECT name, login_user, right_left FROM members_list '.
'WHERE sponsered_id="'.$parent.'";');
while ($row = mysql_fetch_array($result)) {
// indent and display the title of this child
echo '<tr><td>'.
$row['login_user'].' </td><td> '.$row['right_left'].' </td><td> '.$row['sponsered_id'].
"</td></tr>";
// call this function again to display this
// child's children
display_children($row['login_user'], $level+1);
}
}
echo display_children('admin',0);
但没有得到正确的输出....它给我输出
test1 Right admin
test3 Right test1
test44 Left test3
test4 Right test1
test2 Left admin
test43 Left test2
需要输出
test1 Right admin
test2 Left admin
test3 Right test1
test4 Left test1
Right test2
test43 Left test2
Right test3
test44 Left test3
答案 0 :(得分:1)
试试这个
SELECT
login_user,
right_left,
sponsered_id
FROM (
SELECT
login_user,
right_left,
sponsered_id
FROM
members_list
UNION
SELECT
NULL,
CASE when max(right_left) ='Left' THEN 'Right' ELSE 'Left' END AS right_left,
sponsered_id
FROM
members_list
GROUP BY
sponsered_id
HAVING count(sponsered_id) < 2
) as temp
ORDER BY
sponsered_id,
right_left
答案 1 :(得分:0)
你可以试试这个
select login_user , right_left , sponsered_id from (
select login_user , right_left , sponsered_id
from members_list
union all
select login_user , if(right_left ='left', 'right', 'right' ) right_left , sponsered_id
from members_list
)t
group by sponsered_id, right_left
order by login_user