1

このようなことをする必要があるとき:

SELECT * FROM userinfo WHERE id in (18,2,6,4,5)

id 配列は、次のような別のクエリから取得されます。

$ids = $conn->fetchAll('SELECT origin from action WHERE url = "'.$url.'" AND SUBSTRING(origin,1,3)<>"pct" GROUP BY origin');

クエリ ID に正しい形式を与えるために配列を解析する必要がある場合は、次のようにします。

    $norm_ids = '(';
    foreach ($ids as $ids) {
        $norm_ids .= $ids['origin'] .',';
    }
    $norm_ids = substr_replace($norm_ids ,"",-1) .')';

それは次のようなIDを出力します: (id1,id2,id3,id.......)、だから私はただ: FROM userinfo WHERE id in ". $norm_ids;

しかし、私には醜いようです、これをより良くする方法はありますか?

4

4 に答える 4

3

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

$idStr = rtrim(str_repeat('?,', count($ids), ',');
$query = 'SELECT * FROM userinfo WHERE id in (' . $idStr . ')';

そして使用しますprepare()

$conn = $db->prepare($query);
$conn->execute($ids);
$res = $conn->fetchAll(...);
于 2013-01-26T11:07:04.040 に答える
1
SELECT * FROM user_info WHERE id IN (SELECT origin from action ......) ....
于 2013-01-26T11:07:23.307 に答える
1

ID を個別に取得する必要がありますか、またはそれらを 1 つのクエリに結合できますか?

おそらく次のようなもの:

SELECT * FROM userinfo WHERE id in (SELECT origin from action WHERE url = "'.$url.'" AND SUBSTRING(origin,1,3)<>"pct" GROUP BY origin');  

このようにして、SQLサーバーに作業を任せます。

于 2013-01-26T11:09:16.500 に答える
1

私はそのような状況に直面したとき、トリムを使用します

$norm_ids_str = '';
foreach ($ids as $ids) {
    $norm_ids_str .= $ids['origin'] .',';
}
$norm_ids = '(' . trim($norm_ids_str, ',') . ')';
于 2013-01-26T11:48:54.387 に答える