2011-12-01 61 views
0

我有一张名为付款的表格,它添加了所有付款条目。我在支付表中的字段为customer_id,它指客户表中的客户ID。如何在MySQL中按日期获取最新值?

有一个叫做标志的字段,我根据他们的付款状态存储1或0。如果他们支付了他们标志将被0和全款,如果有一个平衡的标志时便会1

有支付表,ADDED_ON,这是一个时间戳

我想取出来的另一场所有CUSTOMER_ID的最新添加的行(在支付表)谁具有标志1(待付款)

我试图从支付表获取这样

$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'"); 

     } 

我知道这样做很长..有没有更简单的方法来做一个查询? 结果并不像我预期的那样。 :(

+0

呃什么是错的做SELECT * FROM其中CUSTOMER_ID = $客户和标志= 1,你是什么意思的结果支付是不是预期? –

+0

在您的示例中,“标志”似乎是付款表的一部分,但您的文本表明它在客户表中。它在哪里?此外,您的代码还会提取所有未付款的客户的所有付款,包括他们付款的付款。所以这是有点不清楚我想要什么.. – GolezTrol

+0

@Daniel - 我现在不能添加一个屏幕截图..有没有什么不对的做select * from payment where customer_id = $ customer和flag = 1 ...但是我想要最后添加的行显示 –

回答

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 
+0

@yepercube你明白我说的:)谢谢芽....它的工作..! –

+0

@ Bala.C:两个人中的哪一个工作? –

+0

@yepercube第一个工作:) –

1

我不知道你的表和字段的名字,但你明白了吧:

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

这将包含相关的最新第一排序的付款客户的所有信息

1

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

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

希望这会得到谁拥有平衡所有客户在加入”秩序_上'。 =)


像下面的答案一样,您还可以添加'AND'来进一步减少结果。

+0

它只是通过added_on对表格进行排序,但我想要最后一次付款 –

+0

由于Grrbrr404表示您可以在最后使用LIMIT 0,1来获取最新的。 – evolutionxbox

1

只需订购您的select语句:

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

您可以通过添加 “降序” 或 “ASC” 你timestemp场背后更改顺序的方向。

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

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循环中的值