mysql选择名称和总名称列计数

mysql选择名称和总名称列计数,mysql,database,wordpress,Mysql,Database,Wordpress,编辑以获得更好的示例: 我试图得到一个不同名称的列表和这些不同名称的总列数,不是每个名称数,而是列数。像这样: id | date | name ----|--------------|-------- 1 | 2017-06-23 | Peter 2 | 2017-06-23 | Sue 3 | 2017-06-23 | Mag 4 | 2017-06-23 | Sue 5 | 2017-06-23 | Paul 6 |

编辑以获得更好的示例:

我试图得到一个不同名称的列表和这些不同名称的总列数,不是每个名称数,而是列数。像这样:

id  |  date        | name
----|--------------|--------
1   |  2017-06-23  |  Peter
2   |  2017-06-23  |  Sue
3   |  2017-06-23  |  Mag
4   |  2017-06-23  |  Sue
5   |  2017-06-23  |  Paul
6   |  2017-06-23  |  Paul
7   |  2017-06-23  |  Sue
预期结果将按名称DESC和限制3以单个数组的顺序排列:

如果查询超过限制,则总数将是限制;如果查询未超过限制,则总数将是限制

解决方案 由于在一个mysql查询中似乎很难达到预期的结果,我选择了一个更简单、更快的解决方案,这也将缩短mysql查询时间

质疑 按名称DESC LIMIT 3从我的表ORDER中选择不同的名称

因为我打算使用php foreach来处理结果,所以我只计算foreach中的名称

$count_names = 0;

foreach($name as $count ){

$my code to manipulate names;

$count_names++;
}
echo $count_names; Gives me the total names.
使用查询限制是因为它是一个每天更新的巨大数据库,可能限制为1000,$count\u ip将返回1000。但是,如果每日名称更新小于1000,则查询返回的值小于限制值,$count\u ips将返回正确的较小名称计数。
谢谢

请检查这是您想要的:

SELECT GROUP_CONCAT(DISTINCT name), COUNT(DISTINCT name) from table;
参考:来自草莓和Tik的评论

更新

在MySQL中:

set @num = 0;
SELECT name FROM (
    SELECT name, @num := @num + 1 AS num
    FROM (
        SELECT name
        FROM mytable
        GROUP BY name
        ORDER BY name
        LIMIT 3
    ) AS a
    UNION
    SELECT @num as name, @num AS num
) AS b
下面是一个使用

至于你为什么要这么做。。。耸耸肩:


请注意,如果您在真正的RDBMS中执行此操作,并且您不喜欢使用变量、内部select语句和联合的所有技巧,那么您可以只执行内部select,并在其中返回所有结果,但使用该语言的resultset size功能,例如:rowCount、num_results、,无论怎样都可以得到最后一行的总数。

只要找到更简单、更轻松的方法就行了

$count_names = 0;

foreach($name as $count ){

$my code to manipulate names;

$count_names++;
}
echo $count_names; Gives me the total names.

选择GROUP_CONCATname,COUNTDISTINCT name…谢谢草莓,它没有给我正确的结果:Peter->Sue->Mag->Paul->4。。。相反,它给了我:Peter->1Sue->1Mag->1Paul->1Rows在RDBMS中表示无序集。除了由order by表达式定义的顺序之外,它们没有其他顺序。您不清楚。请编辑您的问题:您想要什么确切的示例表值?就任意情况的输入而言,输出究竟是什么样子的?这些箭是什么?它们是输出字符串的一部分吗?非常清楚。请刷新你的浏览器,因为我已经回滚了你所有的更改,因为它们没有添加任何内容,并且与《财富》杂志的做法相比,格式更糟糕。你还没有根据我的评论修改内容。说清楚。使用足够的词语。请阅读并按照发帖时的指示行事。您还可以给SQL打印出您的示例的特定输出,这样我们至少可以知道它应该是什么,因为Word一直不起作用。您好,谢谢。。。不,这不是列名称的总和,选择组\u CONCATDISTINCTname,COUNTDISTINCT name from table给我:Peter->1 Sue->1 Mag->1 Paul->1和not Mag Peter Sue 4根据您的要求,这是让步,请参见此处,现在终于。。。。它确实给出了4个名字和总数。现在唯一的问题是它创建了两个数组名。。。昏迷分离和总。是否可以将第一个数组拆分为4个数组(每个名称1个数组+总数组)?另外,将来如何按名称分组、按名称排序并限制为01000?可能类似于:选择DISTINCTname,选择countdistinc name from table from table;问题不清楚。不要猜测,告诉op他们不清楚,并告诉他们编辑他们的问题。好答案:未来可能遇到的问题提示:如果SQL查询问题可以接受基于非SQL查询的答案,则应在问题中明确说明。否则,如果你回答自己的问题时使用了超出你所问范围的内容,那么你的问题可能会被SO mods标记,而没有人希望这样:D
set @num = 0;
SELECT name FROM (
    SELECT name, @num := @num + 1 AS num
    FROM (
        SELECT name
        FROM mytable
        GROUP BY name
        ORDER BY name
        LIMIT 3
    ) AS a
    UNION
    SELECT @num as name, @num AS num
) AS b
$count_names = 0;

foreach($name as $count ){

$my code to manipulate names;

$count_names++;
}
echo $count_names; Gives me the total names.