1

この質問の新しさをお詫びします。プロジェクトを開始したばかりで、テーブルから特定のレコードを取得するための ID の配列があります。これについて最善の方法は何ですか?

以下は機能しますか?

public function getWork($slideIDs) {
    $params = array();
    $params = $slideIDs;

    $count = count($params);

    for($i=0;$i<$count;$i++) {
        $STH = $this->_db->prepare("SELECT * 
            FROM slides
            WHERE slideID = :slideID;");

        $STH->execute($params[$i]);
    }

    $result = $STH->fetchAll(PDO::FETCH_ASSOC);

    return $result;       
}

ありがとう。

4

4 に答える 4

2

他の人と同じ;)

ステートメントimplode($array, ",")に含める必要のある部分を取得するために使用しますIN()

于 2012-05-15T17:53:08.863 に答える
2

IN 句を使用して 1 つの SQL ステートメントのみを実行する方がよい

SELECT * FROM slides WHERE slideID IN (1,2,3,4,5, ...) 

データベースへの接続とトリップが少ないほど、一般的にパフォーマンスが向上します。

そのため、ループ内でその SQL 文字列を作成し、実行を一番下 (ループの外) に移動します。

于 2012-05-15T17:48:25.557 に答える
2

PHP を調整して、次の形式で単一のクエリ文字列を作成します。

SELECT * 
FROM slides
WHERE slideID IN (2,5,11)

複数のクエリを実行しないでください。:)

于 2012-05-15T17:48:10.947 に答える
1

以下はうまくいくはずです。implode を使用して、コンマで区切られた ID を含む必要な文字列を作成し、SQL に渡しました。

    function getWork($slideIDs) {
    $params = implode(",",$slideIDs);
    $STH = $this->_db->prepare("SELECT * 
            FROM slides
            WHERE slideID in ( :slideID );");

    $STH->execute($params);

    $result = $STH->fetchAll(PDO::FETCH_ASSOC);

    return $result;   
    }
于 2012-05-15T18:02:09.883 に答える