2013-02-10 52 views
2

我在mysql中有一个表,我从这个表中获取结果。但不是取出这个表中的所有行,我只想获取其他每一行。所以先得到第一行然后跳过第二行,得到第3行,并跳过第4行等。如何跳过mysql中的每一行?

有没有这样做的方法,如果有的话,可以请教我怎么做。

我已经试过这样:

功能:

function blocked_users_list() { 
      global $connection; 
      global $_SESSION; 
      global $profile_id; 
      $query = "SELECT 
    baseview.* 
    @odd:[email protected] 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 
+1

为什么你想要每隔一行,除了每隔一秒还有一行可以被识别吗? – 2013-02-10 19:14:33

+0

[你如何从mysql中选择每一个第n行]可能的重复(http://stackoverflow.com/questions/858746/how-do-you-select-every-n-th-row-from-mysql) – dotancohen 2013-12-05 16:37:13

回答

2

做查询:

SELECT * 
FROM ( 
    SELECT 
     @row := @row +1 AS rownum, [column name] 
    FROM ( 
     SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 1 
+0

请检查我的更新的问题,看看我是否已经正确地完成了这一点,谢谢 – 2013-02-10 19:16:05

+0

@NickJames我的平常回答是“它工作”吗?如果是,那么你是正确的,如果不是发布错误。 – 2013-02-10 19:24:01

+0

错误列在问题中,不,它不工作。谢谢 – 2013-02-10 19:25:37

-1

使用一个变量来记录的索引,然后用模2($ind % 2)检查 - 这将返回0或1

<?php 
    $users_list = users_list(); 
    $ind = 0; 
    while ($user = mysql_fetch_array($users_list)) { 
     if(($ind++)%2) echo "something"; 
    } 
?> 
0

假设你有一个像

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

提取所有行作为基准。然后,您可以通过使用

SELECT 
    baseview.* 
    @odd:[email protected] 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 
1

你可以在MySQL中使用模量(一个查询)

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

获取所有的奇数编号筛选中每隔一行。