我们在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