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
-------------

シティフィールドを5回以上繰り返すことができない場所!修正時間を超えて繰り返された場合は、最初の5つの結果のみを返します。

この質問は不可能かもしれませんが(私が推測していることです)、解決策がある場合、または私が達成しようとしていることを回避する方法がある場合は、教えてください!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 FiddlewithDemoを参照してください

結果は次のとおりです。

|    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コマンドを実行できますか?もしそうなら、あなたは2つの別々の呼び出しを行うことを試みることができます-

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 に答える