2

mysql にテーブルがあり、このテーブルから結果を取得しています。しかし、このテーブルのすべての行をフェッチする代わりに、1 行おきにフェッチしたいだけです。したがって、最初に行 1 を取得してから 2 番目の行をスキップし、行 3 を取得して行 4 をスキップします。

これを行う方法はありますか?もしそうなら、誰かが私にその方法を教えてください。

私はこれを試しました:

関数:

function blocked_users_list() {
            global $connection;
            global $_SESSION;
            global $profile_id;
            $query = "SELECT
  baseview.* 
  @odd:=1-@odd AS even
FROM 
  (
   SELECT *
    FROM ptb_block_user
    WHERE
      WHERE ptb_block_user.blocked = '1'
      AND ptb_block_user.blocked_id = ".$_SESSION['user_id']."
  ) AS baseview,
  (
    SELECT @odd:=0
  ) AS filter
WHERE
  even=1                
                        ";
            $blocked_users_list = mysql_query($query, $connection);
            confirm_query($query, $connection);
            return $blocked_users_list;
        }

php:

<?php
        $blocked_users_list = blocked_users_list();
        while ($block = mysql_fetch_array($blocked_users_list)) { 



?>

しかし、それはこのエラーを与えます:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/ptb1/blocked_users.php on line 44
4

4 に答える 4

2

クエリでそれを行います:

SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 1
于 2013-02-10T19:06:40.957 に答える
1

mysql でモジュラスを使用できます (1 つのクエリ)

select * from `table` where `id` % 2 = 1

すべての奇数 ID を取得します。

于 2013-02-10T19:30:54.490 に答える
0

次のようなクエリがあると仮定します

SELECT 
  col1 AS colA,
  col2 AS colB
FROM
  sometable
WHERE
  something=17

すべての行をベースラインとしてフェッチします。次に、次を使用して 2 行ごとにフィルター処理できます。

SELECT
  baseview.* 
  @odd:=1-@odd AS even
FROM 
  (
    SELECT 
      col1 AS colA,
      col2 AS colB
    FROM
      sometable
    WHERE
      something=17
  ) AS baseview,
  (
    SELECT @odd:=0
  ) AS filter
WHERE
  even=1
于 2013-02-10T19:08:42.377 に答える
-1

変数を使用してインデックスを記録してから、mod 2($ind % 2)で確認します。これにより、0または1が返されます。

<?php
    $users_list = users_list();
    $ind = 0;
    while ($user = mysql_fetch_array($users_list)) { 
        if(($ind++)%2) echo "something"; 
    } 
?>
于 2013-02-10T19:07:13.980 に答える