1

私は、話すことのマナーでその場でユニークなデータを生成するデータの配列を持っています。実際には、5つのハッシュを持つ配列です。

私がやりたいのは、配列項目ごとのクエリではなく、または基本的に1行のクエリを介してそれぞれをチェックするwhere句を使用した基本的なselectクエリです。

私は、データベースに入るハッシュが他のハッシュと同じにならないようにしようとしていますが、実際に発生している確率が実質的にヌルであることがわかっていますが、それでもなお、申し訳ありませんが、この問題に対する私の見方は安全です。

とにかく、私が考えているクエリは、一致が見つかったかのように意味がありません。クエリは、元の配列から、見つからないものを見つけて、5つすべてが見つからない場合にそれを使用するという結果になります。最終的にはランダムに1つを選択します。新しい配列で1〜5の結果を作成して、その結果からランダムに選択できるようにします。

これは可能ですか、それともソングルクエリでそれぞれを簡単に切り替えることができますか?

4

3 に答える 3

2
"SELECT
        CASE hashes.hash
            WHEN $hashes[0] THEN 0
            WHEN $hashes[1] THEN 1
            WHEN $hashes[2] THEN 2
            WHEN $hashes[3] THEN 3
            ...
        END
    FROM hashes WHERE hashes.hash IN(".implode($hashes).")"

これにより、サーバーに送信したハッシュのどれがサーバーで見つかったかが正確にわかります。

結果セットは、クエリを生成した配列のインデックスキー(0、1、2、3)になります。

100個のハッシュの配列に基づいてクエリを送信し、99個のハッシュの結果セットを取得した場合、データベースに少なくとも1つのハッシュが見つからなかったことを意味します。

次のように結果セットを循環させることができます。

while($row = $pdo->fetch()) {
    $index = $row[0]  // first column of the result set
   unset($hashes[$index]);
}

whileが終了すると、配列に残っているハッシュは、データベースで見つからなかったハッシュのみになります。

于 2012-05-20T06:29:12.867 に答える
0

私の意見では、1つのクエリでそれぞれを循環させる方が簡単だと思います。あなたの言うことから、それを一度に行うことには大きな利点はないようです。

その場合、私は提案します:

 alter table myTable create id_bkp int;
 update myTable set id_bkp=account_id;
 update myTable set account_id=56 where id_bkp=100;
 update myTable set account_id=54 where id_bkp=56;
 alter table myTable drop id_bkp;

もちろん、それは使用しているDBシステムによって異なります。

于 2012-05-20T06:24:54.347 に答える
0

このような意味ですか?

$sql = "SELECT * FROM `table` WHERE `field` = ";

$where_string = "'" . implode("' OR `field` = '",$my_array) . "'";

$sql .= $where_string;

あなたが使用することができます:

$my_array = array_unique($my_array);

重複する値を削除します。

于 2012-05-20T06:30:42.333 に答える