如何在MySQL中按日期获取最新值?

时间:2011-12-01 09:53:25

标签: php mysql

我有一个名为payment的表,它添加了所有付款条目。我在支付表中的字段为customer_id,它指的是客户表中的客户ID。

有一个名为flag的字段,我根据其付款状态存储1或0。如果他们支付全额,他们的旗帜将为0,如果有余额,旗帜将为1

付款表中还有另一个字段,added_on,这是一个时间戳

我想要获取所有有标志1(待付款)的customer_id(在付款表中)的最新添加行

我尝试从这样的付款表中取货

   $rResult = mysql_query("select * from payment  where flag='1'")

然后像这样循环

    while ($aRow=mysql_fetch_object($rResult))
        {
        //fetch out the customer id like this
$customer= $aRow->customer_id;
    $pay_quer = mysql_query("select*from payment where customer_id='$customer'");

        } 

我知道这样做很长时间。有没有更短的方法来执行一个查询? 结果并没有像我预期的那样出现。 :(

5 个答案:

答案 0 :(得分:1)

我不知道您的表格和字段的名称,但您明白了这一点:

SELECT * 
FROM payment
JOIN customer ON payment.customer_id = customer.customer_id
WHERE payment.flag = '1'
ORDER BY payment.added_on ASC;

这将包含有关客户的所有相关信息,这些信息按最新的第一个排序。

答案 1 :(得分:1)

为什么不直接使用一个select语句并遍历结果呢?

SELECT customer_id FROM payment WHERE flag='1' ORDER BY added_on DESC

希望这将使所有按“add_on”顺序保持平衡的客户。 =)


与下面的答案一样,您也可以添加“与”以进一步缩减搜索结果。

答案 2 :(得分:1)

只需订购您的选择声明:

Select * from payment where flag = '1' and customer_id='$customer' order by YourTimeStempFieldHere

您可以在时间字段字段后添加“desc”或“asc”来更改订单方向。

您还可以使用mysql LIMIT 0,1运算符限制结果。如果你这样做,你就不必做一个while循环。

答案 3 :(得分:1)

使用此按订单添加时间。

  $rResult = mysql_query("select * from payment  where flag='1' ORDER BY added_on DESC");

  while ($aRow=mysql_fetch_object($rResult))
    {
    //fetch out the customer id like this
     $customer= $aRow->customer_id;
     $field2 = $aRow->field2 ;
     $field3 = $aRow->field3 ;
     $field3 = $aRow->field4 ;
    } 

不需要第二个查询。你已经获得了for循环中的值

答案 4 :(得分:1)

SELECT p.* 
FROM 
    payment AS p
  JOIN
    ( SELECT customer_id
           , MAX(added_on) AS max_added_on
      FROM payment
      WHERE flag='1'
      GROUP BY customer_id
    ) AS g
    ON  g.customer_id = p.customer_id
    AND g.max_added_on = p.added_on
ORDER BY p.added_on DESC

或(目前尚不清楚你想要什么,也不清楚旗帜是如何使用的)。这将显示不同的结果,仅显示payment中最新行flag=1的客户:

SELECT p.* 
FROM 
    payment AS p
  JOIN
    ( SELECT customer_id
           , MAX(added_on) AS max_added_on
      FROM payment
      GROUP BY customer_id
    ) AS g
    ON  g.customer_id = p.customer_id
    AND g.max_added_on = p.added_on
WHERE p.flag='1'
ORDER BY p.added_on DESC