如何在mysql中获得不重复的结果

时间:2013-01-09 15:04:11

标签: php mysql

我试图通过不让特定字段重复超过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。

3 个答案:

答案 0 :(得分: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 with Demo

结果是:

|    NAME |      CITY |
-----------------------
| person1 | Nashville |
| person2 | Nashville |
| person3 | Nashville |
| person4 | Nashville |
| person5 | Nashville |
| person7 |  New York |

答案 1 :(得分:0)

    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;

答案 2 :(得分:-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;

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