Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL彩票查询_Php_Mysql_Sql_Count_Sql Order By - Fatal编程技术网

Php SQL彩票查询

Php SQL彩票查询,php,mysql,sql,count,sql-order-by,Php,Mysql,Sql,Count,Sql Order By,我有一个7列的简单表格 Week ¦ 1st ¦ 2nd ¦ 3rd ¦ 4th ¦ 5th ¦ 6th ¦ 每周,我父亲都会在我创建的一个简单PHP脚本中添加周六英国彩票号码。他患有早发性阿尔茨海默症,并试图保持大脑活跃。今晚他问了我一个关于数据库的问题。他问我是否有可能看到6个最受欢迎的数字 我尝试创建一个简单的SQL查询: SELECT 1st, 2nd, 3rd, 4th, 5th, 6th, COUNT(*) AS 'foo' FROM `dad` GROUP BY 1st, 2nd

我有一个7列的简单表格

Week ¦ 1st ¦ 2nd ¦ 3rd ¦ 4th ¦ 5th ¦ 6th ¦
每周,我父亲都会在我创建的一个简单PHP脚本中添加周六英国彩票号码。他患有早发性阿尔茨海默症,并试图保持大脑活跃。今晚他问了我一个关于数据库的问题。他问我是否有可能看到6个最受欢迎的数字

我尝试创建一个简单的SQL查询:

SELECT 1st, 2nd, 3rd, 4th, 5th, 6th, COUNT(*) AS 'foo' FROM `dad` GROUP BY 1st, 2nd, 3rd, 4th, 5th, 6th ORDER BY foo DESC
但结果并不像我预期的那样

1st 2nd 3rd 4th 5th 6th foo
2   6   8   32  33  35  1
3   6   12  17  35  40  1
3   6   31  43  46  53  1
etc
我希望表合并成一列,然后计数并得到一个简单的结果,比如:

Number   Count
2        1
3        2
6        3
8        1
然后把它按升序排列。然后,我可以使用SQL查询为他创建一个简单的表来显示最常见的数字

我正在考虑做一个通用的SQL查询

SELECT 1st FROM `dad`
然后用结果创建一个数组,然后添加

SELECT 2nd FROM `dad`
到数组的末尾,继续计算所有6列,然后使用PHP分别计算数字


有没有更快的方法?

您的第一项工作应该是修复数据模型。每个数字应存储在单独的行中,而不是列中,如:

week    pos    num
   1      1      6
   1      2      8
   1      3     32
那么您的查询将是一个简单的聚合查询:

select num, count(*) no_picks from dad group by num order by no_picks desc
对于给定的表结构,需要将列解压到行。在MySQL中,您可以使用
union all
实现以下目的:

select num, count(*) no_picks
from (
    select `1st` num from dad
    union all select `2nd` from dad
    union all select `3rd` from dad
    union all select `4th` from dad
    union all select `5th` from dad
    union all select `6th` from dad
) t
group by num 
order by no_picks

您的第一项工作应该是修复数据模型。每个数字应存储在单独的行中,而不是列中,如:

week    pos    num
   1      1      6
   1      2      8
   1      3     32
那么您的查询将是一个简单的聚合查询:

select num, count(*) no_picks from dad group by num order by no_picks desc
对于给定的表结构,需要将列解压到行。在MySQL中,您可以使用
union all
实现以下目的:

select num, count(*) no_picks
from (
    select `1st` num from dad
    union all select `2nd` from dad
    union all select `3rd` from dad
    union all select `4th` from dad
    union all select `5th` from dad
    union all select `6th` from dad
) t
group by num 
order by no_picks
你可以做:

select
  n, cnt
from (
  select
    n,
    count(*) as cnt
  from (
    select `1st` as n from `dad` union all
    select `2nd` from `dad` union all
    select `3rd` from `dad` union all  
    select `4th` from `dad` union all
    select `5th` from `dad` union all
    select `6th` from `dad`
  ) x
  group by n
) y
order by cnt desc
limit 6
你可以做:

select
  n, cnt
from (
  select
    n,
    count(*) as cnt
  from (
    select `1st` as n from `dad` union all
    select `2nd` from `dad` union all
    select `3rd` from `dad` union all  
    select `4th` from `dad` union all
    select `5th` from `dad` union all
    select `6th` from `dad`
  ) x
  group by n
) y
order by cnt desc
limit 6

在MySQL 8.x中,您可以使用
RANK()
。你使用的是什么版本的MySQL?@ TheImpaler Will,不支持他们吗?@我正在使用PHPmyAdmin测试Sql认真考虑修改你的模式。数据库表不是电子表格。令人失望的是,还没有人提到这一点-哦,在MySQL 8.x中几乎没有人可以使用
RANK()
。你使用的是什么版本的MySQL?@ TheImpaler Will,不支持他们吗?@我正在使用PHPmyAdmin测试Sql认真考虑修改你的模式。数据库表不是电子表格。令人失望的是,没有人已经提到过这一点-哦,几乎没有人-这段代码工作得几乎完美,当我运行它时,我得到这样一个结果:21,42,44,3,6,28我通过cnt DESC,n ASC添加了顺序,得到了结果21,3,6,28,35,42,所以它在计数后显示数字顺序。是否有办法将其更改为获得最高的6个计数,然后从最低的数字排序到最高的数字?@TonySavage是的,您可以将当前查询包含在另一个外部查询中,然后在此外部查询上排序。例如:
select*from()z order by n ASC
。这段代码工作得几乎完美,当我运行它时,我得到这样一个结果:21、42、44、3、6、28我通过cnt DESC、n ASC添加了order,得到了结果21、3、6、28、35、42,所以它在计数后显示数字顺序。是否有办法将其更改为获得最高的6个计数,然后从最低的数字排序到最高的数字?@TonySavage是的,您可以将当前查询包含在另一个外部查询中,然后在此外部查询上排序。例如:
select*from(),按n ASC排序。