0

質問があります。あなたが私を助けてくれることを願っています。

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クエリで引用符をオフのままにすると、データが返されます(ただし、一致するものが見つかりません)。

4

1 に答える 1

0

クエリを実行します。

$harNumArray = array(
    '0100001943',
    '0100001944',
    '0100002392',
    '0100007414',
    '0100012110',
);
$harNumArray2 = "'".implode("','", $harNumArray)."'";
$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2)");

次に、結果のマップを作成します。

$rows = array();
while ($row = mysqli_fetch_assoc($results)) {
    $rows[$row['har_id']] = $row;
}

次に、一致をチェックする ID をループできます。

foreach ($harNumArray as $id){

    if (isset($rows[$id])){
        ... do something with $rows[$id]
    }else{
        ... no match for $id
    }
}

更新 1:

クエリが何も返していないようです。次のコードを実行します。

$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements LIMIT 5");
while ($row = mysqli_fetch_assoc($results)) print_r($row);

そして、出力で質問を更新します。あなたのデータベースには、あなたが考えているものがまったく含まれていないようです。

于 2013-03-20T17:48:55.593 に答える