3

我需要在第一个查询中获取表的上半部分,在下一个查询中我需要下半部分。

我尝试为顶部执行此操作,但它不起作用

SELECT * FROM t_domains WHERE type_domain='radio' ORDER BY 
date_created DESC LIMIT 0, (COUNT(*) / 2)

我需要它作为我的函数工作的两个查询。

有人有任何指示或提示吗?

4

4 回答 4

3

我建议做2个查询:

select count(*) from t_domains

获取总数,然后使用limit和offset获取你想要的数据:

select * from t_domains limit count/2

对于顶部和

select * from t_domains offset count/2

对于下半部分......

这种方法还为您提供了一种在另一种情况下限制查询的方法:如果表包含 100 万条记录怎么办?

于 2012-09-02T18:50:29.860 回答
1

上半年

 mysql-> SET @n := 0

 mysql-> SELECT *,nnn FROM (
         SELECT *, @n := @n + 1 AS nnn  FROM t_domains   ORDER BY date_created 
         ) AS t
         WHERE nnn <=  ( SELECT COUNT(date_created) / 2  FROM t_domains  ) AND type_domain =    'radio'

下半场,在此处更改 WHERE nnn <= this "<" on this ">"

于 2012-09-02T19:43:18.367 回答
1

正如MySQL 的官方文档中解释的那样,除了准备好的语句和存储的程序外,两个LIMIT参数都必须是CONSTANTS 。LIMIT简单地存储计数并稍后在子句中使用它似乎并不容易。

从 8.0 版开始,MySQL 提供了一个ROW_NUMBER()函数,它提供了一个比其他答案指出的更简单的解决方案。

set @count=(select count(*)/2 from t_domains);

select * from (
select *, ROW_NUMBER() over (order by date_created desc) as row_num 
from t_domains
) as t
where row_num <= @count
;

您还可以检查RANK(),它认为具有相同值的行具有相同的“排名”。

于 2020-03-23T09:25:52.713 回答
0

这总是有效的。

存储计数

SELECT COUNT(*) FROM t_domains WHERE type_domain='radio'

然后使用存储的计数。

SELECT * FROM t_domains WHERE type_domain='radio' ORDER BY 
date_created DESC LIMIT 0, {$stored_count/2}
于 2012-09-02T18:49:02.460 回答