2016-12-08 4 views
0

私は、各ユーザーが親ユーザー(ユーザーツリー)を持つプログラムを作成しています。すべての親ユーザーは、その子ユーザーが保持するすべてのデータを表示できます。 この時、私はこのようなスクリプトを使用して子ユーザにすべての既存のデータを表示するには:子ユーザーからデータを取得する方法

$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

JOIN節を使用することができます(注:リンクはMySQLの参照ですが、ほとんどの他のデータベースエンジンはJOINもサポートしています - 例えばMS SQL Server、PostgreSQLなど)。

はまた、代わりにmysqli_ *関数を使用するように...ドキュメントごとmysql_query()と同様の機能を更新しているI以下のサンプルに気づく:

この拡張機能は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/>'; 
} 
関連する問題