Mysql как выбрать одинаковые записи(по столбцу)

L
На сайте с 17.05.2013
Offline
88
1085

Есть в таблице поле по которому нужно выбрать записи с одинаковыми столбцами. Подскажите как это грамотно сделать.

Пишу в пхпмайадмин запрос: select r1.* from regions r1 where exists (select * from regions r2 where r2.id <> r1.id and r2.country = r1.country)

Но подвисает пхпмайадмин. Пишет: Ошибка при обработке запроса Код ошибки: 504 Текст ошибки: Gateway Time-out.

пробовал писать пхп скрипт. Но тоже получаю ошибку 500 Internal Server Error.

В логах пишет:

1 mod_fcgid: read data timeout in 40 seconds

2 Premature end of script headers: test.php

Таблица небольшая - 10,5 тыс записей.

Подскажите как выбрать одинаковые записи?

SX
На сайте с 15.07.2008
Offline
79
#1

возможно способ написанный на коленке...

запрос: select count(`id`) AS `kolich`, * from `regions` GROUP BY `country`

потом через PHP отсеять все у кого `kolich` = 1...

получите в массиве все `country` которые не уникальны..

потом делаете запрос по ним и получаете все записи которые вам нужны...

как-то так select * from `regions` where `country` in (...)

forest25
На сайте с 12.09.2009
Offline
67
#2

Есть еще SELECT DISTINCT

Для тестов проще всего (при недоступности нормальной человеческой консоли) ограничивать ваши запросы чтобы они не превышали лимит php по времени. Просто добавьте LIMIT 100 к примеру во время конструирования запроса.

Потом когда составите нормальный быстрый запрос уберете.

VPS 512MB 20GB SSD KVM - 5$ (http://u.hmdw.me/digitalocean) | ИМХО о хостингах (http://u.hmdw.me/hosting)
A
На сайте с 19.07.2010
Offline
130
#3
SpaceX:

запрос: select count(`id`) AS `kolich`, * from `regions` GROUP BY `country`
потом через PHP отсеять все у кого `kolich` = 1...
получите в массиве все `country` которые не уникальны..
потом делаете запрос по ним и получаете все записи которые вам нужны...
как-то так select * from `regions` where `country` in (...)

угу, тоже самое, только средсвами sql:


select r1.* from regions r1,
(SELECT id FROM regions group by country,id having count(*)>1) r2
where r1.id=r2.id

попробовал на своей табличке с 31тыс записей: Запрос занял 0.0421 сек.

.............
siv1987
На сайте с 02.04.2009
Offline
427
#4

SELECT * FROM regions GROUP BY country HAVING COUNT(*) > 1

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий