[英]How to fetch the latest value by date in MySQL?
我有一個稱為付款表,其中添加了所有付款條目。 我在付款表中有一個字段customer_id,它表示客戶表中的客戶ID。
有一個名為flag的字段,我根據其付款狀態存儲1或0。 如果他們支付了全額,則標記將為0,如果有余額,標記將為1
付款表中還有另一個字段add_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'");
}
我知道這樣做很長..有沒有更短的方法來完成一個查詢? 結果也沒有達到我的預期。 :(
我不知道您的表和字段的名稱,但您明白了:
SELECT *
FROM payment
JOIN customer ON payment.customer_id = customer.customer_id
WHERE payment.flag = '1'
ORDER BY payment.added_on ASC;
這將包含與客戶有關的所有與付款相關的信息(按最新的優先順序排列)。
為什么不只使用一個select語句並遍歷結果呢?
SELECT customer_id FROM payment WHERE flag='1' ORDER BY added_on DESC
希望這將使所有具有按'additional_on'余額的客戶。 =)
像下面的答案一樣,您也可以添加“與”以進一步減少結果。
只需訂購您的選擇語句:
Select * from payment where flag = '1' and customer_id='$customer' order by YourTimeStempFieldHere
您可以通過在timestemp字段后面添加“ desc”或“ asc”來更改順序方向。
您也可以使用mysql LIMIT 0,1
運算符限制結果。 如果這樣做,則不必執行while循環。
用它來按時間排序。
$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循環中獲得了值
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.