0

他のテーブルの列を他のテーブルのwhileループに追加しようとしていますが、このようなことを試しましたが、機能しないようです。どうすればこのようなことを達成できますか?私が理解している限り、data_authの変数を配列に保存する必要がありますが、ループでそれらをエコーするにはどうすればよいですか?

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage");
while($rand = mysql_fetch_assoc($SQL)){
      $id = $rand['id'];            
      $user= $rand['user'];

      $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'");
      while($rand = mysql_fetch_assoc($SQL2)){
            $data_auth = $rand['data_auth'];
      }

      ?>
      <li><?php echo "$user"; ?></li>
      <li><?php echo "$data_auth"; ?></li>
      <?php  
      }
      ?>
4

3 に答える 3

3

次のように、1つのSQLクエリを使用できます。

//$SQL = mysql_query("SELECT users.*,access_log.data_auth FROM users,access_log WHERE users.user = access_log.user ORDER BY data_reg DESC LIMIT $offset, $rowsperpage");
//SQL with JOIN syntax
$SQL = mysql_query("SELECT users.*,access_log.data_auth FROM users INNER JOIN access_log ON users.user = access_log.user ORDER BY data_reg DESC LIMIT $offset, $rowsperpage");
while($rand = mysql_fetch_assoc($SQL)){
      $id = $rand['id'];            
      $user= $rand['user'];
      $auth = $rand['data_auth'];
      ?>
      <li><?php echo $user; ?></li>
      <li><?php echo $auth; ?></li>
 <?php  
 }
 ?>
于 2012-10-01T22:03:44.783 に答える
2

私が理解しているように、ユーザーに関連する列にすべてのdata_auth値のリストを表示したいだけです。最も簡単な方法は次のとおりです。

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage");
while($rand = mysql_fetch_assoc($SQL)){
      $id = $rand['id'];            
      $user= $rand['user'];

      $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'");

      ?>
      <li><?php echo "$user"; ?></li>
      <li><?php          
              while($rand2 = mysql_fetch_assoc($SQL2)){
                       echo $rand2['data_auth'] . '<br/>';
            }
          ?>
      </li>
      <?php  
      }
      ?>

また、2番目に同じ変数名を使用するのはwhile安全ではありません。

または一時配列を使用する場合:

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage");
while($rand = mysql_fetch_assoc($SQL)){
      $id = $rand['id'];            
      $user= $rand['user'];

      $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'");
      $data_auth = array();
      while($rand2 = mysql_fetch_assoc($SQL2)){
                       $data_auth[] = $rand2['data_auth'];
            }
      ?>
      <li><?php echo "$user"; ?></li>
      <li><?php  foreach($data_auth as $da){
             echo $da . "<br/>";
           }   
          ?>
      </li>
      <?php  
      }
      ?>
于 2012-10-01T22:04:15.130 に答える
0

data_auth変数は、mysqlによってフェッチされないため、タイプミスがある他のwhileループでは出力できません。

 <li><?php echo "data_auth"; ?></li>
于 2012-10-01T21:59:26.173 に答える