mysql选择名称和总名称列数

时间:2017-06-24 13:31:32

标签: mysql database wordpress

编辑以获得更好的例子:

我试图获取DISTINCT名称列表以及这些不同名称的总列数,而不是每个名称计数而是列。像这样:

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

预期结果将在单个数组ORDER BY name DESClimit 3:

MAG 
PAUL 
Peter 
3

如果查询超过,则总计数将是限制,如果查询未超过限制,则总计数为。

由于在一个mysql查询中似乎很难实现预期的结果,我选择了一个更简单,更快速的解决方案,它将减少mysql查询时间。

查询     SELECT DISTINCT name FROM my table ORDER by name DESC LIMIT 3;

由于我打算使用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.

使用查询LIMIT是因为它每天更新一个巨大的数据库,可能限制为1000,$ count_ip将返回1000.但如果每日名称更新小于1000,则查询返回比LIMIT小的值和$ count_ips将返回正确的较小名称计数。 谢谢

3 个答案:

答案 0 :(得分:1)

在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

(以下是使用SQL fiddle from fortune's answer

的变体的示例

关于为什么你想这样做...... 耸肩:)

注意,如果你在一个真正的RDBMS中这样做,并且你不喜欢变量和内部select语句和联合的所有技巧,你可以只做内部选择(对它有限制的那个)和返回那里的所有结果,但使用语言的“结果集大小”功能(例如:rowCount(),num_results,等等)来获取你的最后一行,即总数。

答案 1 :(得分:0)

请检查这是你想要的:

SELECT GROUP_CONCAT(DISTINCT name), COUNT(DISTINCT name) from table;

参考:草莓和Tik的评论

<强> 更新

(SELECT DISTINCT(name) from table ORDER BY name LIMIT 3)
  UNION 
(SELECT IF(COUNT(DISTINCT(name)) > 3, 3, COUNT(DISTINCT(name)))  FROM table )

SQLFIDDLE DEMO

答案 2 :(得分:0)

只是发现它更容易和mysql光。

$count_names = 0;

foreach($name as $count ){

$my code to manipulate names;

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