我试图通过不让特定字段重复超过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。
答案 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
结果是:
| 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;
有人可能需要对此进行检查,但总体思路仍然存在。唯一的问题是你的最终结果不会按名称排序表。相反,它让城市中的人首先拥有'纳什维尔',然后是其他所有人。