как получить не дублированные результаты в mysql

Я пытаюсь добраться, результаты mysql, не позволяя определенной области повторяется больше чем 5 раз.

Например, позволяет, говорят, что у меня есть стол как это:

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

2
добавлено
Просмотры: 2
nl ja de
два комментария выше меня ясно показывают, что люди слишком ленивы, чтобы написать код и объяснить, не делая глупый комментарий о вопросе.
добавлено автор shnisaka, источник
группа, наличие, учитывается... и т.д.:)
добавлено автор duedl0r, источник
ха-ха.. люди также слишком ленивы, чтобы провести их собственное исследование и задать глупые вопросы:)
добавлено автор duedl0r, источник
Невозможный? It' s едва налоговый!
добавлено автор Strawberry, источник

3 ответы

Как насчет чего-то вроде этого, что использует переменные, чтобы проверить текущий ряд к предыдущему ряду, если они - то же самое тогда, увеличится номер строки, если они не будут номером строки, то перезагрузит:

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

See SQL Fiddle with Demo

Результат:

|    NAME |      CITY |
-----------------------
| person1 | Nashville |
| person2 | Nashville |
| person3 | Nashville |
| person4 | Nashville |
| person5 | Nashville |
| person7 |  New York |
7
добавлено
действительно хороший пример. Я выберу его как правильный ответ. но я хотел бы видеть то, что могут сделать другие.
добавлено автор shnisaka, источник
@DawidSajdak я уже сделал =),
добавлено автор shnisaka, источник
хороший один чувак!
добавлено автор Dawid Sajdak, источник
@shnisaka вы должны, выбирает его как правильный ответ прямо сейчас, никто ничего не придумывает лучше!
добавлено автор Dawid Sajdak, источник

Вам разрешают выполнить больше чем одну команду 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;

Кто-то, возможно, должен проверить это, но общее представление стоит. Единственная проблема с этим - ваш конечный результат, не заказали бы стол по имени. Скорее у этого были бы люди с городом, имеет 'Нэшвилл' сначала, и затем всех остальных.

1
добавлено
Я не сделал downvote вы, но это требует знания заранее названий города, относительно которых я сомневаюсь, будет, знают во время выполнения запросов.
добавлено автор Taryn, источник
Не уверенный, почему я был downvoted. Комментарии помогли бы.
добавлено автор aug, источник
А-а-а это имеет смысл. Жаль я полностью забыл об этом. Я на самом деле своего рода newb к SQL и I' m, просто пытаясь больше принять участие. Спасибо за совет:) и большой ответ btw.
добавлено автор aug, источник
    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;
0
добавлено