1
public function getAllCelebDataFinal ($database,$celebrityId,$lastOutputId) 
{
    $getalldata = $database->executeObjectList("
        SELECT *
        FROM (
            (SELECT v.vidId, NULL as newsId, NULL as photoId, NULL as imageFile,
                    v.title as vidTitle, NULL as newsTitle, v.videoLink AS vidLink,
                    NULL as newsVidLink, NULL as newDetail , v.addDate
             FROM videos v
             WHERE v.celebrityId='".$celebrityId."' AND v.isPublished=1)
          UNION ALL
            (SELECT NULL as vidId, n.newsId,NULL as photoId,NULL as imageFile,
                    NULL as vidTitle, n.title as newsTitle, NULL AS vidLink,
                    n.videoLink as newsVidLink, n.details as newDetail,
                    n.addDate
             FROM news n
             WHERE n.celebrityId='".$celebrityId."' AND n.isPublished=1)
          UNION ALL
            (SELECT NULL as vidId,NULL as newsId,p.photoId,p.imageFile,
                    NULL as vidTitle, NULL as newsTitle, NULL AS vidLink,
                    NULL as newsVidLink,  NULL as newDetail , p.addDate
             FROM photos p
             WHERE p.celebrityId='".$celebrityId."' AND p.isPublished=1)
        ) results
        ORDER BY addDate DESC
        LIMIT 5");
    return $getalldata; 
}

これを 2 番目のクエリと見なします。制限 5 で最初のクエリを実行している場合、パラメーターとして $lastOutputId として 5 を送信し、このクエリを 5 から 5+5 として実行し、同じように次のクエリは制限 10 から 15 で実行されます。どうすればそれを行うことができますか?

4

5 に答える 5

3

LIMIT には 2 つのパラメータがあります。私たちの場合、次のように LIMIT を使用できると思います。

LIMIT $lastOutputId, 5

ドキュメント: http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

于 2013-03-28T11:59:20.617 に答える
2

mysql の limit オプションは、start と length の 2 つのパラメータを取ることができます。したがって、次のことができます。

limit 0,5

最初の 5 を取得するには

limit 5,5

次の 5 を取得するには

limit 10,5

次などを取得するには、lastOutputId に基づいて最初の番号を設定するだけです。

于 2013-03-28T11:59:19.847 に答える
1

上記の回答に同意します。LIMIT は 2 つのパラメーターまたは 1 つのパラメーターを取ります。

  • SELECT ... LIMIT オフセット num_records
  • SELECT ... LIMIT num_records --> LIMIT 0 num_records と同等

ただし、パフォーマンス上の理由から、このアプローチに対して警告します。

SQL SELECT ステートメントは、Web サイトが 5 行を要求するたびに、すべての MySQL サーバー ソフトウェア レイヤー (接続、認証、クエリ解析、クエリ結果キャッシュ、ストレージ エンジン、結果のシリアル化) を通過します。

SELECT something FROM どこかで LIMIT 1000000,10 を実行すると、実際にはテーブルから 1,000,010 レコードが読み取られ、ストレージ エンジンに大きな負荷がかかります! 結果のシリアル化では、最初の 1M 行は無視されます。

1 回のクエリでデータ全体を取得し、結果を Web サーバー上のローカル メモリまたは memcached などの共有揮発性ストレージに保持する方が効率的である場合があります。

于 2013-03-28T12:09:21.900 に答える
0
class celeb {
    public function getAllCelebDataFinal ($database,$celebrityId,$lastOutputId, $limit)
    // Your query

    }
}
$numberOfRepeat = 5; //just example


$limit = new Celeb();

$limit->getAllCelebDataFinal($val, $val, $val, $val);

}

次に、オブジェクトを foreach ループに入れて、ボタンまたは get 変数を使用してその数値を動的にします。これで完了です:)

于 2013-03-28T12:02:34.113 に答える
0
$limit = $_REQUEST['limit'];
$start = $_REQUEST['start'];

$getRec = "SELECT * FROM MyUser LIMIT $start , $limit";
于 2013-03-28T12:08:04.220 に答える