Mysql选择除第一行和最后一行以外的所有行。

3
我希望数据库显示除第一行和最后一行外的所有行,因为我已经在这些行上使用了CSS代码。
我尝试了以下方法:
SELECT * FROM db 
WHERE 
keywords LIKE '%example%' LIMIT 9999 OFFSET 1
 AND 
keywords LIKE '%example%' DESC LIMIT 9999 OFFSET 1

由于行数可能会增加,所以我无法写出确切的数字。


可能是重复的问题:MySQL:如何选择表中除最后一行之外的所有行 - Liam Lutton
3
建议您使用PHP代码来处理此事,以避免发出2个或更多的请求。 - user10089632
1
嗨@Kakotas,如果下面提供的答案解决了您的问题,您可以将其标记为已接受吗? - Cyril Graze
@ Cyril 完成了,抱歉。 - Kakotas7
5个回答

4

没有必要在SQL层面上尝试剪切这些值来使查询复杂化,您可以这样做:

$results = $db->query( /* regular query with all results */ );

array_pop($results);
array_shift($results);

// Now use $results, which now contains only the "middle" content

如果您真的想在数据库层面上实现它,您可以使用以下方法:
SELECT * FROM db 
WHERE keywords LIKE '%example%' 
AND id <> (SELECT MAX(ID) FROM TABLE)
AND id <> (SELECT MIN(ID) FROM TABLE)

1
我认为这是最明智的答案。 - W.K.S

0

您可以尝试这个:

SELECT * FROM TABLE WHERE ID != (SELECT MAX(ID) FROM TABLE) LIMIT 1,9844674507370

但是正如我在评论中所说的:强烈建议您使用PHP代码处理此问题,以避免进行2个或更多请求


0

您可以像这样使用UNION

SELECT * FROM db WHERE keywords LIKE '%example%' order by keywords ASC limit 1 UNION SELECT * FROM db WHERE keywords LIKE '%example%' order by keywords DESC limit 1;

0

您可以在不使用 LIMITOFFSET 的情况下完成它。

SELECT * FROM table_name WHERE id != (SELECT MAX(id) FROM table_name) AND id != (SELECT MIN(id) FROM table_name)

SELECT * FROM db 
WHERE 
keywords LIKE '%example%'
AND
id != (SELECT MAX(id) FROM db) 
AND 
id != (SELECT MIN(id) FROM db)

这里的id将是您的自增键。


-1

第一:你可以在PHP中像下面这样处理它。避免两个查询。

 $last_record =count($records)-1;
 $i=0;
   foreach($records as $key=>$row)
   {
      if($i==0){
           //apply the css
       }

      if($i== $last_record ){
           //apply the css
       }
   }

查询:

SELECT * FROM db WHERE keywords LIKE '%example%' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接