我們在MySQL中有一個表,其中一列是date_added
。MySQL - 如何從此表中選擇並按Date_Added排序?
對於每個date_added
可能有若干記錄。
我需要出示網頁上,它顯示了按日期排序下降了行,但最多隻有10%的時間。
輸出示例:
Jun 1
item
item
item
item
item
item
May 31
item
item etc
是否有一種方式來運行MySQL中的查詢將獲取這樣的結果嗎?
我們在MySQL中有一個表,其中一列是date_added
。MySQL - 如何從此表中選擇並按Date_Added排序?
對於每個date_added
可能有若干記錄。
我需要出示網頁上,它顯示了按日期排序下降了行,但最多隻有10%的時間。
輸出示例:
Jun 1
item
item
item
item
item
item
May 31
item
item etc
是否有一種方式來運行MySQL中的查詢將獲取這樣的結果嗎?
我不知道我準確地瞭解你在做什麼之後,但你可以嘗試:
SELECT * FROM myTable GROUP BY date_added DESC LIMIT 0,10;
如果每行都有不同的日期值,但是很多行具有完全相同的日期值,所以它不會返回所有行。例如,我們在6月18日添加了30行,但由於小時和分鐘值的差異,它只返回2行。 –
這是否會將總結果限制爲10或每個'date_added'的結果爲10?我懷疑它的前... – Nivas
我認爲這將限制總成績分至10 –
SELECT * FROM records WHERE date_added in (
SELECT date_added FROM dates ORDER BY date_added DESC
)
向我有限的知識的程度,則不能選擇各只有10行日期。您需要在應用的業務邏輯中強制執行此限制。
'ORDER BY'在子選擇不影響該命令從一個更高級別的查詢返回。 –
不能與查詢來實現,因爲據我所知。唯一的解決辦法是將這個邏輯放入網頁的代碼中。
確保記錄是通過日期排序。
在PHP中,其中一個方案是:
foreach ($rs as $row)
{
if ($tmp_date != $row->date_added) { $counter = 0; }
if ($counter <= 10) {
echo $row->yourinfo; //Whatever you want echoed from your recordset
}
$counter++;
$tmp_date = $row->date_added;
}
是的,實際上我們已經在代碼中做到了。只是想知道在mysql中是否有一種有效的方法。 –
好吧,如果你找到一個,請告訴我! ;) – Rick
不知道有關性能(可能不是很好):
SELECT m.*
FROM
myTable AS m
WHERE m.id IN
(SELECT ms.id
FROM myTable AS ms
WHERE ms.date_added = m.date_added
ORDER BY ms.something ASC --- whatever (ASC or DESC)
LIMIT 10
)
ORDER BY m.date_added
, m.something
你也可以試試這個:
SELECT m1.*
FROM myTable AS m1
JOIN myTable AS m2
ON m2.date_added = m1.date_added
AND m2.id <= m1.id --- this could also be:
--- m2.someField <= m1.someField
GROUP BY m1.id
HAVING COUNT(*) <= 10
ORDER BY m.date_added
或變化:
SELECT m1.*
FROM myTable AS m1
LEFT JOIN myTable AS m2
ON m2.date_added = m1.date_added
AND m2.id < m1.id
GROUP BY m1.id
HAVING COUNT(*) < 10
ORDER BY m.date_added
SET @rank:=0;
select TTT.f1, TTT.value
from
(select TT.f1, TT.value,TT.c,
@rank:[email protected]+1 as rnk,
case when @rank>=TT.c then @rank:=0 end as dummy
from (
select T.f1, T.value, cnt.c
from t2 T, (select f1, count(*) as c from t2 group by f1) cnt
where cnt.f1 = T.f1
order by T.f1 asc, T.value desc) TT) TTT
where TTT.rnk<=10
其中f1
是「日期」字段和value
是「項目」字段
其實我沒有得到任何地方。我正在考慮使用GROUP,但它不能解決問題。我可以按日期對其進行排序,但是如何確保每個日期最多隻有10條記錄被提取 –
您的表格模式是什麼?請在您的問題 –
中發佈您在Web應用程序中使用的語言?它是Java還是.NET或其他?請指定編碼語言,可能是我們可以幫助的 – Rakesh