【问题标题】:mysql return row for each field column count valuemysql为每个字段列计数值返回行
【发布时间】:2013-07-27 03:42:33
【问题描述】:

我不知道如何提出这个问题,所以我不确定我在寻找什么。这就是我想要做的。

我的桌子上有邮政编码和一个计数器列

 id  zipcode count
 11  50022   23
 12  50023   1
 13  50025   8
 14  50042   2
 15  50076   2

我需要一个 select 语句,它返回邮政编码 X 计数器列中的金额(整数值)。

所以选择返回看起来像这样:

50022
50022
50022
50022
50022
50022 (and on 23 times)
50023 (one record here)
50025 (there were eight of these so eight records).

等等。

是否有一个函数或函数组可以在 MySQL 中实现这一点?

这是一个更大查询的一部分,所以我无法在服务器端代码中处理它(否则我只会创建一个循环)。

希望这一切都有意义,并在此先感谢!

更新:我并不想得到一个独特的分组......做相反的事情(正如下面一个人评论的那样)。

【问题讨论】:

  • 您应该设置一个 SQLFiddle 并向我们展示您已经尝试过的内容。

标签: mysql select


【解决方案1】:

这可以是你想要的。虽然我没有很好地理解你的问题..

    $q = mysql_query("SELECT count FROM <table> WHERE zipcode='50022'");

    while($data = mysql_fetch_array($q)){
    echo "The {$data['zipcode']} is {$data['count']} times printed.";
    for($i=1;$i<=$data['count'];$i++){
      echo $i." - ".$data['zipcode'];
}
    }

更新:

如果您尝试在 mysql 中执行此操作,请在 SQL 查询中尝试此操作

SELECT count FROM <table> WHERE zipcode='50022'

&lt;table&gt; 更改为您的表名。

【讨论】:

  • 这看起来像 PHP 代码(我在 MySQL 内部的视图中执行此操作)。我不是要获取计数值。
【解决方案2】:

如下所示创建一个虚拟表

CREATE TABLE `dummy1` (
  `dummyId` int(11) NOT NULL,
  PRIMARY KEY  (`dummyId`)
) 

insert into dummy1 values(1),(2),(3), (4), (5),.......(n);

n 是一个相当大的数字

之后使用下面的查询来填充结果

select zipcode from yourtable, dummy1 where countValue <= dummyId order by zipcode

我知道这不是一个巧妙的解决方案。但是由于mysql不像oracle那样支持connect by,这似乎是克服这种情况的解决方案

类似问题,Refer This

【讨论】:

    【解决方案3】:

    我认为您正在寻找的是 sql group by 子句。此子句允许您按特定限定符对数据进行分组,并添加到您的 select 语句中。

    因此,如果我理解正确并且您按计数列对邮政编码进行分组,您将按照以下方式进行操作:

    从 [table_name] 中选择邮政编码 按计数分组;

    我希望这会有所帮助。

    【讨论】:

    • 我认为您误解了这个问题。他想要 GROUP BY 的倒数。每个邮政编码只有一个条目。他希望邮政编码出现一定次数。例如,第一行,“计数”列是 23,所以他希望该邮政编码出现 23 次。
    • 啊,是的,我误会了。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2020-05-24
    • 2021-06-12
    • 2012-10-27
    相关资源
    最近更新 更多