使用mysql从某一行开始选择

使用mysql从某一行开始选择,mysql,select,Mysql,Select,如何从某一行及以后的行中进行选择 例如,我要查询的表 pg_id pg_title pg_backdate 1 a 2012-09-18 13:32:49 2 b 2011-09-18 13:32:49 3 c 2011-06-18 13:32:49 4 d 2010-05-18 13:32:49 5 e 2009-04-18

如何从某一行及以后的行中进行选择

例如,我要查询的表

pg_id   pg_title    pg_backdate
1       a           2012-09-18 13:32:49
2       b           2011-09-18 13:32:49
3       c           2011-06-18 13:32:49
4       d           2010-05-18 13:32:49
5       e           2009-04-18 13:32:49
6       f           2011-10-18 13:32:49
7       g           2012-04-18 13:32:49
8       h           2012-09-18 13:32:49
9       i           2012-10-18 13:32:49
我只想选择前5行,从本月和本年开始,我一直在处理下面的查询-它只选择本月和本年的前5行,而不选择以后的行

SELECT *
    FROM root_pages AS p

    WHERE DATE_FORMAT(p.pg_backdate, '%Y') = '2011'
    AND DATE_FORMAT(p.pg_backdate, '%m') = '09' 

    ORDER BY p.pg_backdate DESC

    LIMIT 5
理想情况下,它应该只返回这些行

pg_id   pg_title    pg_backdate
1       a           2012-09-18 13:32:49
2       b           2011-09-18 13:32:49
6       f           2011-10-18 13:32:49
7       g           2012-04-18 13:32:49
8       h           2012-09-18 13:32:49
像您这样使用函数将扼杀MySQL使用索引的任何机会

如果要从月份中选择前5名,请执行以下操作:

SELECT *
FROM root_pages AS p
WHERE p.pg_backdate BETWEEN '2011-09-01' AND '2011-09-30'
ORDER BY p.pg_backdate DESC
LIMIT 5
如果您希望本月前5名之后的行,请执行此操作

  SELECT *
  FROM root_pages AS p
  WHERE p.pg_backdate BETWEEN '2011-09-01' AND '2011-09-30'
  ORDER BY p.pg_backdate DESC
  LIMIT 5
UNION ALL
  SELECT *
  FROM root_pages AS p
  WHERE p.pg_backdate > '2011-09-30'
  ORDER BY p.pg_backdate DESC
上述查询将从2011年9月1日起返回5行。
orderby
子句将返回最接近该日期的日期。您可以通过PHP生成日期(本月1日)-或者-您可以让MySQL为您生成日期:

SELECT *
FROM root_pages
WHERE pg_backdate >= CAST(CONCAT_WS('-', YEAR(CURRENT_TIMESTAMP), MONTH(CURRENT_TIMESTAMP), 1) AS DATE)
ORDER BY pg_backdate
LIMIT 0, 5

他想凭身份证点菜看起来

SELECT * 
FROM (
SELECT * 
FROM root_pages AS p
WHERE p.pg_backdate >=  '2011-09-01'
ORDER BY p.pg_backdate DESC 
LIMIT 5
) AS sub
ORDER BY sub.pg_id

通常新的东西是第一位的,谁在乎旧的东西。。。正确的。但是如果需要,请删除
DESC
。您可能希望结果按升序排序,对吗?是的,它将升序。谢谢萨尔曼,谢谢你。我喜欢这个答案,因为它更简单,我不必使用PHP来生成日期。我能问一下吗?演员,康卡斯特?他们是什么意思?谢谢,不客气。你可以在网上查。总之,
CAST
将一种数据类型转换为另一种(本例中为varchar-to-date)
CONCAT_WS
使用分隔符连接,使用
-
作为粘合剂连接当前年份、当前月份和1。
SELECT *
FROM root_pages
WHERE pg_backdate >= CAST(CONCAT_WS('-', YEAR(CURRENT_TIMESTAMP), MONTH(CURRENT_TIMESTAMP), 1) AS DATE)
ORDER BY pg_backdate
LIMIT 0, 5
SELECT * 
FROM (
SELECT * 
FROM root_pages AS p
WHERE p.pg_backdate >=  '2011-09-01'
ORDER BY p.pg_backdate DESC 
LIMIT 5
) AS sub
ORDER BY sub.pg_id