1

以下のクエリでは、一致するエントリが複数ある(完全にまたは部分的に一致している)場合でも、1つの結果しか表示されません。一致するすべてのエントリが返されるように修正するにはどうすればよいですか。

//$allowed is a variable from database.

$sql = "SELECT `users`.`full_name`, `taglines`.`name`, `users`.`user_id` FROM 
`users`  LEFT JOIN `taglines` ON `users`.`user_id` = `taglines`.`person_id`
 WHERE ( `users`.`user_settings` = '$allowed' ) and ( `users`.`full_name` 
 LIKE '%$q%' ) LIMIT $startrow, 15";

$result = mysql_query($sql);

$query = mysql_query($sql) or die ("Error: ".mysql_error());

$num_rows1 = mysql_num_rows($result);

if ($result == "")
{
    echo "";
}
echo "";


$rows = mysql_num_rows($result);

if($rows == 0)
{

}
elseif($rows > 0)
{
    while($row = mysql_fetch_array($query))
    {
        $person = htmlspecialchars($row['full_name']);
    }
}
}  

print $person;
4

1 に答える 1

2

$person反復ごとに上書きするためです。

$person[]複数を期待する場合は、配列に保持します。次に、出力するときに foreach ループでループします。

関連はありませんが、2回もクエリを実行します。必要なのは1つだけです$result = mysql_query($sql);

更新 (簡単な出力例):

<?php 
$person=array();

while($row = mysql_fetch_array($query)){
 $person[] = array('full_name'=>$row['full_name'],
                   'email'=>$row['email'],
                   'somthing_else1'=>$row['some_other_column']);
}

//Then when you want to output:
foreach($person as $value){
    echo '<p>Name:'.htmlentities($value['full_name']).'</p>';
    echo '<p>Eamil:'.htmlentities($value['email']).'</p>';
    echo '<p>FooBar:'.htmlentities($value['somthing_else1']).'</p>';
}
?>

または、連結を使用してループ内で出力を構築する別の方法もあります。

<?php 
$person='';
while($row = mysql_fetch_array($query)){
 $person .= '<p>Name:'.$row['full_name'].'</p>';
 $person .= '<p>Email:'.$row['email'].'</p>';
}

echo $person;
?>

または、単にエコーします。

<?php 
while($row = mysql_fetch_array($query)){
 echo '<p>Name:'.$row['full_name'].'</p>';
 echo '<p>Email:'.$row['email'].'</p>';
}
?>
于 2012-05-03T23:54:13.453 に答える