以下のコードは行 116 を 2 回表示しますが、行 118 は表示しません。この問題を解決する方法はありますか?
$data = mysql_query("SELECT * FROM item WHERE dcid IN('116','118')")
or die(mysql_error());
$info = mysql_fetch_array($data);
foreach ($info as $item) {
echo($item);
}
mysql_fetch_array は単一の行のみをフェッチします。通常、これは while ループで使用され、すべての結果を循環します。
上記の例を続けるには:
$data = mysql_query("SELECT * FROM item WHERE dcid IN('116','118')") or die(mysql_error());
while ($item = mysql_fetch_array($data)) {
echo($item)
}
mysql_fetch_array は、行の連想配列と通常の数値キーの結果セットの両方を含む、このような配列で単一の行を返します。
0=> column,
column=>column
それが foreach で 2 回返される理由です。このように使用します。
mysql_fetch_array($result, MYSQL_ASSOC);
クエリは次のようにする必要があります。
$data = mysql_query("SELECT * FROM item WHERE dcid IN('116','118')") or die(mysql_error());
while ($item = mysql_fetch_array($data)) {
echo $item['column_name1'];
} echo $item['column_name2'];
group by
このように使用
$data =mysql_query("SELECT * FROM item WHERE dcid IN('116','118') group by dcid")
or die(mysql_error());
また、dcid がキーで、自動インクリメント (行の ID) の場合は、LIMIT 116,118 も使用できます。