質問があります。あなたが私を助けてくれることを願っています。
WHERE / INを使用して大きなSELECTステートメントを実行し、使用するすべての「検索語」に対して$arrayを渡します。
簡単な例..(最終的には$ arrayの方がはるかに大きいですが)
$harNumArray = (0100001943,0100001944,0100002392,0100007414,0100012110,0100015761,0100015835);
$harNumArray2 = implode(',', $harNumArray);
$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2)");
//**outputting the matches values/data from the search (select)**
while ($row = mysqli_fetch_assoc($results)) {
//echo "HAR_ID: ". $row["har_id"]. "\tGUAR_NUM: " . $row["guar_num"] . "\r\n<BR>";
echo $row["har_id"]. "\t" . $row["guar_num"] . "\r\n<BR>";
fwrite($fh, $row["har_id"] . "\t" . $row["guar_num"] . "\r\n");
}
そしてこれはうまく/素晴らしいです(*ヒントをmsturdyに感謝します)...'一致がある場合..一致がない場合..何も返されません。
ただし、たとえば、$ harNumArray(インデックス0)の最初の値がデータベースで見つからなかった場合... $ row = mysqli_fetch_assoc($ results loop .. ..
見つかった番号のみ..およびDBからプルされたそれらの一致/関連データ..
私はそれがまだこのようになりたいです:
- 0100001943 ^-// DBに番号(エントリ)がありませんが、最初の位置に元の検索語を使用しています)
- 0100001944 ^ 0123467894
- 0100002392 ^ 0011122234
- 0100007414 ^ 0002130567
- 0100012110 ^ 0000045432
- 0100015761 ^ 0001000045
- 0100015835 ^ 0998775233
または、このように許容されます(ただし、上記のレイアウトの方が適しています)。
- -^-// DB内の欠落/ホット検出番号(エントリ)
- 0100001944 ^ 0123467894
- 0100002392 ^ 0011122234
- 0100007414 ^ 0002130567
- 0100012110 ^ 0000045432
- 0100015761 ^ 0001000045
- 0100015835 ^ 0998775233
$harNumArray配列の最初の数値がWHERE/IN SELECTに見つからない場合、何も返されません(これは理にかなっています)。
ただし、「不一致を説明する必要があります」。最後の「リスト」(テキストファイル)の間隔/順序を維持するために、空白(または何か)を挿入します。
どうすればこれを行うことができますか?
ありがとう!
編集::
これがコードの現在の状態です:(まだ一致を返さない)
@Cal
//stack overflow approach:
//format array data
$harNumArray2 = "'" . implode("','", $harNumArray) . "'"; //single quotes
//$harNumArray2 = implode(',', $harNumArray); //no quotes
//$harNumArray2 = '"' . implode('","', $harNumArray) . '"'; //double quotes
//print_r("ARRAY CHECK: " . $harNumArray2);
$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2) ORDER BY har_id ASC") or die(mysql_error());
//$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN (" . $harNumArray2 . ") ORDER BY har_id ASC") or die(mysql_error());
echo("<BR>");
print_r("SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2)");
echo("<BR>");
$rows = array();
while($row = mysqli_fetch_assoc($results)) {
$rows[$row['har_id']] = $row;
}
foreach ($harNumArray as $id){
if (isset($rows[$id])){
//... do something with $rows[$id]
print_r($rows[$id] . "<BR>");
}else{
//... no match for $id
print_r("....no match....");
echo("<BR>");
}
}
それでも一致は返されません...一重引用符、引用符、二重引用符は関係ありません。
困惑?
ありがとう
更新II:
@ Cal-
わかりました。指定したコードを実行しました。
これは私の出力でした:
Array([har_id] => 000100007537 [guar_num] => 0000676798)Array([har_id] => 000100007538 [guar_num] => 0000676798)Array([har_id] => 000100007539 [guar_num] => 0000676798)Array([har_id] => 000100007768 [guar_num] => 0000675266)配列([har_id] => 000100007769 [guar_num] => 0000675266)
DBのHAR_ID=varchar(12)
DBのGUAR_NUM=varchar(12)
#resultsクエリで引用符をオフのままにすると、データが返されます(ただし、一致するものが見つかりません)。