从``euro''中选择COUNTIdAS合计,其中N1 = $ i或N2 = $ i或N3 = $ i或N4 = $ i或N5 = $ i限制50

问题描述

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

注意:

    没有limit
  • order by不会给您稳定的结果;我添加了一个order by子句,您需要在其中添加相关的排序列

  • in很方便,可以避免重复or个条件

  • 使用参数;不要在查询字符串中连接变量,这样效率很低-更重要的是,如果值来自代码外部,则不安全

  • count(<column>)考虑了除null值之外的所有值;为了使查询完全有意义,id应该为可空列;如果它不包含任何null值,则保证查询返回50(或表中的记录总数,如果小于50

,

我通过以下方法解决了这个问题:

$ 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);