コードを次のように変更します。
foreach ($arr as $name => $quan) {
$query = "SELECT * FROM table WHERE name='$name'";
$result = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_array($result)) {
echo $quan." ".$row['name']. "\n";
}
}
}
結果をループする必要があります。ところで、使用をやめてmysql_query()
ください!代わりに MySQLi または PDO を使用します ( SQL インジェクションmysqli_real_escape_string()
に注意してください。入力パラメーターの処理に使用できます)。MySQLi の実装については、次のとおりです。
foreach ($arr as $name => $quan) {
$query = "SELECT * FROM table WHERE name='$name'";
$result = mysqli_query($query) or die(mysqli_error());
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)) {
echo $quan." ".$row['name']. PHP_EOL;
}
}
}
むしろ、私は(上記のように)"\n"
を使用することを好みますPHP_EOL
コメントが示唆するように、SQL ステートメントは次のように 1 回実行できます。
$flipped_array = array_flip($arr); // flip the array to make "name" as values"
for($i = 0; $i < count($flipped_array); $i++) {
$flipped_array[$i] = '\'' . $flipped_array[$i] . '\''; // add surrounding single quotes
}
$name_list = implode(',', $arr);
$query = "SELECT * FROM table WHERE name IN ($name_list)";
// ... omit the followings
たとえば、$arr に "peter"、"mary"、"ken" が含まれている場合、クエリは次のようになります。
SELECT * FROM table WHERE name IN ('peter','mary','ken')
補足:しかし、私はあなたの質問を理解していません。クエリから名前を取得するだけですか? 行数を確認したり、次のように名前でグループ化することもできます。
SELECT name, COUNT(*) AS cnt FROM table GROUP BY name ORDER BY name
欲しいものを手に入れるために。
UPDATE(再度): OPのコメントに基づいて、ここに解決策があります:
$flipped_array = array_flip($arr); // flip the array to make "name" as values"
for($i = 0; $i < count($flipped_array); $i++) {
$flipped_array[$i] = '\'' . $flipped_array[$i] . '\''; // add surrounding single quotes
}
$name_list = implode(',', $arr);
$query = "SELECT name, COUNT(*) AS cnt FROM table WHERE name IN ($name_list) GROUP BY name HAVING COUNT(*) > 0 ORDER BY name";
$result = mysqli_query($query) or die(mysqli_error());
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)) {
echo $quan." ".$row['name']. ": " . $row['cnt'] . PHP_EOL;
}
}
上記のクエリは、テーブルにのみ表示される名前を表示します。表にない名前は表示されません。完全なコードになりました (再び SQL インジェクションに注意してください)。