sql >> データベース >  >> RDS >> Mysql

行とその周囲の行を選択します

    ORDER BYは1つだけ UNIONに対して句を定義できます 'dクエリ。 UNIONを使用するかどうかは関係ありません またはUNION ALL 。 MySQLはLIMITをサポートしています UNIONの一部の句 クエリを実行しますが、順序を定義する機能がないと比較的役に立ちません。

    MySQLには、データのギャップ(エントリが削除されたために欠落している)に対処する必要があるランキング関数もありません。唯一の代替手段は、SELECTステートメントで増分変数を使用することです。

    SELECT t.id, 
           @rownum := @rownum+1 as rownum 
      FROM MEDIA t, (SELECT @rownum := 0) r
    

    これで、連続した番号の行のリストを取得できるため、次を使用できます。

    WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2) 
                     AND @midpoint - ROUND(@midpoint/2) [email protected]
    

    @ midpoint、@midpoint - ROUND(@midpoint/2)の値として7を使用 4の値を返します 。合計10行を取得するには、@upperlimit値を10に設定します。完全なクエリは次のとおりです。

    SELECT x.* 
      FROM (SELECT t.id, 
                   @rownum := @rownum+1 as rownum 
              FROM MEDIA t, 
                   (SELECT @rownum := 0) r) x
     WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit
    

    ただし、それでもLIMITを使用する場合 、次を使用できます:

      SELECT x.* 
        FROM (SELECT t.id, 
                     @rownum := @rownum+1 as rownum 
                FROM MEDIA t, 
                     (SELECT @rownum := 0) r) x
       WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
    ORDER BY x.id ASC
       LIMIT 10
    


    1. Wordpressの更新mysqlテーブル

    2. Oracleストアドプロシージャから結果セットを取得する

    3. BufferedInputStreamを画像に変換します

    4. エラー:Postgresを使用したシーケンスcitys_id_seqの権限が拒否されました