データベースが2つのフィールド(Roll no
およびname
)を持っていて、対応する名前を検索するロール番号のリスト(n個の値)があります。1つのクエリで複数の値を検索する
これはSQL
またはHQL
の1つのクエリを使用して実行できますか?
データベースが2つのフィールド(Roll no
およびname
)を持っていて、対応する名前を検索するロール番号のリスト(n個の値)があります。1つのクエリで複数の値を検索する
これはSQL
またはHQL
の1つのクエリを使用して実行できますか?
SELECT name FROM [table] WHERE id IN ([list of ids])
ここで、[list of ids]
は、例えば、2,3,5,7
です。
リストは可変です...リストのサイズと値はあらかじめ定義されていません。 –
リストは可変であってもよい。クエリは決して可変ではありません。クエリはクエリです。おそらく、クエリを作成する場所のコードを表示する必要があります。 – Jakumi
IN
演算子を使用し、Roll no
をコンマで区切ります。
SELECT name
FROM yourtable
WHERE [Roll no] IN (1, 2, 3, 4, etc)
上記のようにIN文を使用できます。
これにはいくつかの小さな問題があります。この節の値の数が大きすぎると、パフォーマンスが低下する可能性があります。
第2の問題は、多くの開発環境では、項目数が可変であるクエリを動的に作成する必要があることです(パラメータ化クエリを使用する場合は、プレースホルダの数が可変です)。あなたのコードが厄介に見える場合は難しくありませんが、あなたがコピーしてテストに使用できるすばらしい素敵なSQLを持っていないことを意味します。
しかし、例(phpを使用)。
ここで、INはSQLで動的に作成されます。ロール番号は整数だけであると仮定すると、配列内の各メンバにintval()を適用して、SQLで非整数値が使用されないようにします。
<?php
$list_of_roll_no = array(1,2,3,4,5,6,7,8,9);
$sql = "SELECT FROM some_table WHERE `Roll no` IN (".implode(", ", array_map ('intval', $list_of_roll_no)).")";
?>
mysqliバインドされたパラメータを使用するのはちょっと面倒です。これは、バインド・パラメータ・ステートメントが可変数のパラメータを必要とするためです。 2番目のパラメータは、バインドされる値であり、参照渡しされることを期待しています。だからここのforeachは、参照の配列を生成するために使用される: -
<?php
$list_of_roll_no = array(1,2,3,4,5,6,7,8,9);
if ($stmt = $mysqli->prepare("SELECT FROM some_table WHERE `Roll no` IN (".implode(",", array_fill(0, count($list_of_roll_no), '?')).")"))
{
$bind_arguments = [];
$bind_arguments[] = str_repeat("i", count($list_of_roll_no));
foreach ($list_of_roll_no as $list_of_roll_no_key => $list_of_roll_no_value)
{
$bind_arguments[] = & $list_of_roll_no[$list_of_roll_no_key]; # bind to array ref, not to the temporary $recordvalue
}
call_user_func_array(array($statement, 'bind_param'), $bind_arguments);
$statement->execute();
}
?>
別の解決策は、別のテーブルにすべての値をプッシュすることです。一時テーブルにすることができます。次に、テーブルと一時テーブルの間でINNER JOINを使用して、一致する値を検索します。あなたがすでに持っているものに応じて、これは非常に簡単です(たとえば、複数のレコードを簡単に挿入するPHPクラスがあります。クラスを渡し続け、クラスをバッチアップして時折挿入しますデータベース)。
はいできます。 'IN'演算子について読む – Jens
リストのサイズが動的である場合、IN演算子はどのように使用できますか? –
あなたはあなたの質問を呼んでいますか? – Jens