1

以下のクエリは検索スクリプトを使用します。何らかの理由で、いずれかの条件が真の場合、すべての結果が返されるわけではありません。私は何が間違っているのですか?

$sql = "SELECT name, id_code from codes WHERE name LIKE '%$q%' OR id_code 
LIKE '%$q%'";

$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)
{
print("<div id=norequests>No results for <strong>$q</strong></div>");

}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{

$name = htmlspecialchars($row['name']);
$code = htmlspecialchars($row['id_code']);

}

print("$code: $name<br /> <br />");
}

}


else{
    echo '<div id="error">No results for $q.</div>';
}
4

3 に答える 3

3

ループは各ループの値を上書きするため、最終的に表示されるのは最後のサイクルの値だけ$nameです。$code

while( $row = mysql_fetch_array( $query ) ) {
  $name = htmlspecialchars($row['name']);
  $code = htmlspecialchars($row['id_code']);
}

echoこれらの値は、ループ内から実行することも、コレクションのどこかにプッシュすることもできます。

while ( $row = mysql_fetch_array( $query ) ) {
  $names[] = htmlspecialchars( $row["name"] );
  $codes[] = htmlspecialchars( $row["id_code"] );
}

または、両方の値を1つの配列に入れることもできます。

$set = array();
while ( $row = mysql_fetch_array( $query ) ) {
  $set[] = array( 
    "Name" => htmlspecialchars( $row["name"] ),
    "Code" => htmlspecialchars( $row["id_code"] )
  );
}

この時点で、すべての名前とコードを配列(または配列)にロードしました。これら配列は、ループの実行後に操作できます。

print_r( $names ); // or $set

冗長アクション

さらに、いくつかの冗長なコードがあります。

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

これにより、クエリが2回実行されます。その必要はありません。

$num_rows1 = mysql_num_rows($result);
$rows = mysql_num_rows($result);

これは、返された行の数を2回カウントしています。繰り返しますが、その必要はありません。

于 2012-05-20T01:36:35.213 に答える
1

の外で印刷していwhileます。つまり、結果がいくつあっても、1つだけが印刷されます。

ループ内で印刷する

while($row = mysql_fetch_array($query))
{
    $name = htmlspecialchars($row['name']);
    $code = htmlspecialchars($row['id_code']);
    print("$code: $name<br /> <br />");
}

または、ループ中に変数を配列に収集し、ループの後に必要に応じて使用します

$result_array = array();
while($row = mysql_fetch_array($query))
{
    $name = htmlspecialchars($row['name']);
    $code = htmlspecialchars($row['id_code']);

    $result_array[] = array(
        'name' => $name,
        'code' => $code
    );
}
print_r($result_array);
于 2012-05-20T01:40:22.983 に答える
0

全文検索にMySQLを使用するべきではありません(http://en.wikipedia.org/wiki/Full_text_searchを参照)。代わりに、MySQLのフルテキスト機能の使用を検討してください:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html。または、さらに良い方法として、Lucene(http://lucene.apache.org/を参照)やSphinx(http://sphinxsearch.com/を参照)などの「実際の」全文検索エンジンを使用します。

于 2012-05-20T04:04:57.523 に答える