2

我试图通过不让特定字段重复超过 5 次来从 mysql 获取结果。

例如,假设我有一张这样的表:

-------------
Name        City    
person1     Nashville
person2     Nashville
person3     Nashville
person4     Nashville
person5     Nashville
person6     Nashville
person7     New York
-------------

我希望它返回的是:

-------------
Name        City    
person1     Nashville
person2     Nashville
person3     Nashville
person4     Nashville
person5     Nashville
person7     New York
-------------

城市领域不能重复超过五次的地方!如果重复超过修复次数,则只返回前五个结果。

这个问题可能是不可能的(这就是我的猜测),但如果有解决方案或无论如何可以解决我想要实现的目标,请告诉我!我可以使用 PHP。

4

3 回答 3

7

像这样使用变量检查当前行到前一行的东西怎么样,如果它们相同,那么行号将增加,如果它们不是行号将重置:

select name, city
from
(
  select name, 
    city,
    @row:=(case when @prev=city then @row else 0 end) + 1 as rownum,
    @prev:=city pcity
  from yourtable
  order by city, name
) src
where rownum <= 5

请参阅带有演示的 SQL Fiddle

结果是:

|    NAME |      CITY |
-----------------------
| person1 | Nashville |
| person2 | Nashville |
| person3 | Nashville |
| person4 | Nashville |
| person5 | Nashville |
| person7 |  New York |
于 2013-01-09T15:08:51.307 回答
1
    SELECT x.*
      FROM my_table x 
      JOIN my_table y
        ON y.name <= x.name 
       AND y.city = x.city 
     GROUP 
        BY x.city
         , x.name 
    HAVING COUNT(*) <= 5;
于 2013-01-09T15:12:48.277 回答
-1

您是否允许执行多个 MySql 命令?如果是这样,您可以尝试进行两个单独的调用-

SELECT name, city FROM table WHERE city = 'Nashville' ORDER BY name LIMIT 5;
SELECT name, city FROM table WHERE city <> 'Nashville' ORDER BY name;

有人可能需要对此进行检查,但总体思路是成立的。唯一的问题是您的最终结果不会按名称排序表。相反,它会让这个城市的人首先拥有“纳什维尔”,然后是其他所有人。

于 2013-01-09T15:18:02.353 回答