使用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