在mysql和其他条件中选择最后插入的行

时间:2012-11-25 17:37:24

标签: php mysql

我的表名为fiscalyear


这些是

  • id(自动增量)
  • 开始(财政年度开始日期)
  • 结束(财政年度结束日期)
  • 有效(0(开放)或1(已关闭))

  • 开始列包含2012-01-01

  • 等日期
  • 结束列包含日期,如2013-12-31

我希望获得财政年度的开始和结束日期

这些是条件

  1. 即开放,即0,
  2. 也应该是最后插入的。
  3. 这是我试过的查询,请根据我的条件更新我的查询

    SELECT CONCAT(BEGIN,'/',END) AS YEAR FROM fiscalyear WHERE active='0' ORDER BY `id` DESC LIMIT 1
    

    本格式的上述查询选择日期:2012-01-01 / 2013-12-31但是我想在2012-13版打印本格式的预订日期..

4 个答案:

答案 0 :(得分:2)

如果你想要最后一行,你可以按id的顺序按DESC顺序订购表,这是自动增量。

SELECT `BEGIN`,`END` 
FROM `fiscalyear` 
WHERE `active`='0' 
ORDER BY `id` DESC
LIMIT 1

应该注意,BEGIN和END是MySQL中的保留字,应该用“`”表示为字段

至于打印日期,我推荐PHP类DateTime

答案 1 :(得分:0)

id主键排序,并使用LIMIT 1,这样您只能获得最后一条记录。使用内置的DATE_FORMAT格式化日期。

SELECT
    CONCAT(DATE_FORMAT(`BEGIN`, '%Y'), '-',
    DATE_FORMAT(`END`, '%Y')) AS mydates
FROM
    `fiscalyear`
WHERE
    `active` = 0
ORDER BY
    `id` DESC
LIMIT 1

编辑:我将查询更改为连续年份,以便输出2012-2013。结果将在mydates。如果您希望结束年份为13而不是2013格式,请在格式字符串中使用%y小写y

答案 2 :(得分:0)

关于你的第二个问题,你可以在数据库中定义Begin和End作为DateTime(我记得有些数据类型是在mySQL中定义的)然后你可以使用这个函数:

/* Analyzes time-date and returns mktime!*/
function analyze_time_date($tdstr)
{
    // tdstr : 2010-08-12 11:41:14
    //         0000000000111111111
    //         0123456789012345678
    $year   = (int)substr($tdstr,0,4);
    $month  = (int)substr($tdstr,5,2);
    $day    = (int)substr($tdstr,8,2);

    $hour   = (int)substr($tdstr,11,2);
    $minute = (int)substr($tdstr,14,2);
    $second = (int)substr($tdstr,17,2);

    return mktime($hour,$minute,$second,$month,$day,$year);
}

/*  */
function format_time_date($tdstr,$format)
{
        return date($format,analyze_time_date($tdstr));
}

如果要在数据库中插入新行,则应在SQL查询中使用'date time field name' = NOW()

答案 3 :(得分:0)

以下是我需要的查询

SELECT
CONCAT(DATE_FORMAT(`BEGIN`, '%Y'), '-',
DATE_FORMAT(`END`, '%y')) AS mydates

这     0_fiscal_year 哪里     closed = 0 订购     id DESC 限制1