问题描述
select COUNT(Id) AS Total
from `euro`
where (N1 = $i or N2 = $i or N3 = $i or N4 = $i or N5 = $i)
LIMIT 50
如何仅计算50个结果?
我已经尝试过了,没有成功
$sql= "SELECT * FROM euro where (N1 = $i or N2 = $i or N3 = $i or N4 = $i or N5 = $i) LIMIT 50";
$query = "select COUNT(Id) As Total FROM ($sql) as a"
或者这个:
$sql= "SELECT * FROM euro LIMIT 50";
$query = "select COUNT(Id) As Total FROM ($sql) as a where (N1 = $i or N2 = $i or N3 = $i or N4 = $i or N5 = $i)"
我不确定我是否理解结果的最后一部分是否全部给出50
我有这张桌子:
id日期(星期几)N1 N2 N3 N4 N5 E1 E2
1 2004-02-13星期五1 4 12 41 50 1 4
2 2004-02-28星期五2 5 32 33 39 4 6
3 2004-03-10星期二23 26 43 44 49 9 10
我有这个:
$ query =“从euro
中选择COUNT(Id)AS总计,其中(N1 = $ i或N2 = $ i或N3 = $ i或N4 = $ i或N5 = $ i)”;
而且它可以有效地对表中的所有记录进行计数,因此这意味着它必须尊重该部分。
现在我有:
$ query =“选择COUNT(N1)作为总计FROM(SELECT * FROM euro
其中$ i在(N1,N2,N3,N4,N5)中按ID Desc LIMIT 50排序a];
总共有50个...我不明白...
解决方法
通常,您通常会先在子查询中选择记录,然后进行汇总:
select count(id) as total
from (
select id
from euro
where ? in (n1,n2,n3,n4,n5)
order by ??
limit 50
) t
注意:
-
没有
-
order by
不会给您稳定的结果;我添加了一个order by
子句,您需要在其中添加相关的排序列 -
in
很方便,可以避免重复or
个条件 -
使用参数;不要在查询字符串中连接变量,这样效率很低-更重要的是,如果值来自代码外部,则不安全
-
count(<column>)
考虑了除null
值之外的所有值;为了使查询完全有意义,id
应该为可空列;如果它不包含任何null
值,则保证查询返回50
(或表中的记录总数,如果小于50
)
limit
的我通过以下方法解决了这个问题:
$ query =“从euro
中按ID DESC顺序选择ID”;
$结果= mysqli_query($ db,$ query);
$ resultados = mysqli_num_rows($ result);
$ query =“ SELECT COUNT(Id)As from euro
作为总数,其中$ i在(N1,N2,N3,N4,N5)和(Id>($ resultados -50))中按ID DESC排序“;
$ result = mysqli_query($ db,$ query);