как получить данные от дочернего пользователя

Я делаю программу, где у каждого пользователя есть родительский пользователь (дерево пользователей). Каждый родительский пользователь может просматривать все данные, хранящиеся у дочернего пользователя.
На этот раз, чтобы увидеть все имеющиеся данные о дочернем пользователе, я использую такой скрипт:

    $query = "select * from com_oportunity where asign_to='$lcode' ";
$gsql=mysql_query("select a.id, b.code from com_roles a, com_users b where   a.parent_id='$lrole' and a.id=b.role");
while($grow=mysql_fetch_row($gsql)){
$query.=" or  asign_to='".$grow[1]."' ";
$checksql=mysql_query("select a.id, b.code from com_roles a, com_users b where a.parent_id='$grow[0]' and a.id=b.role");
$checksqlnum=mysql_num_rows($checksql);
if($checksqlnum!=0){
while($checkrow=mysql_fetch_row($checksql)){
$query.=" or  asign_to='".$checkrow[1]."' ";
$checksql2=mysql_query("select a.id, b.code from com_roles a, com_users b where a.parent_id='$checkrow[0]' and a.id=b.role");
$checksqlnum2=mysql_num_rows($checksql2);
if($checksqlnum2!=0){
while($checkrow2=mysql_fetch_row($checksql2)){
$query.=" or  asign_to='".$checkrow2[1]."' ";
}
}
}
}
}
$query.=" order by id";

$sql=mysql_query($query);

Скрипт ограничен глубиной до 3 уровней пользователей; если я хочу иметь неограниченные уровни глубины пользователя, как мне упростить сценарий выше?

0

Решение

Вы должны быть в состоянии использовать ПРИСОЕДИНИТЬСЯ предложение (Примечание: ссылка на ссылку на MySQL, но большинство других механизмов баз данных также поддерживают JOIN — например, MS SQL Server, PostgreSQL и т. д.).

Также обратите внимание на образец ниже, что я обновил mysql_query () и аналогичные функции, чтобы использовать функции mysqli_ * вместо … согласно документации:

Предупреждение Это расширение было объявлено устаревшим в PHP 5.5.0 и удалено в PHP 7.0.0. Вместо этого MySQLi или же PDO_MySQL расширение должно быть использовано.

например

$sqlText = "SELECT DISTINCT o.* FROM com_oportunity o JOIN com_users u on o.asign_to = u.code JOIN com_roles r on (r.id = u.role OR r.parent_id = u.role) order by o.id";
//replace these values with the values you need
$server = 'server_name_or_address_here';
$user = 'username';
$password = 'passwordForUsername';
$database = 'databaseName';
$connection =    mysqli_connect($server,$user,$pass,$database);

$updatedQuery = "SELECT DISTINCT o.*
FROM com_oportunity o
JOIN com_users u on o.asign_to = u.code
JOIN com_roles r on (r.id = u.role OR r.parent_id = u.role)
order by o.id";
$sql=mysqli_query($connection, $updatedQuery);
if ($sql && mysqli_num_rows($sql)) {
while($row=mysqli_fetch_row($sql)){
echo 'row: '.print_r($row,1).'<br />';
}
}
else {
echo 'query returned false: '.$sql.'|<br/>';
}
0

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

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

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