[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск одинаковых полей
artuska
Здрасьте!

Вообщем, есть таблица, в ней есть колонка "фамилия". Эти самые фамилии - они могут повторяться (например, если в базу записана инфа про семью Смитов (Smith's) - папа, мама, дочь - то там будет 3 фамилии "Smith").

Задача - нужно вывести все фамилии в этой базе, но, те фамилии, которые встречаютя более одного раза - выводить только 1 раз (гы, не могу сформулировать точнее, но из наглядного примера (который ниже) будет все понятно...) - не всех Смитов 3 раза, а тока 1 раз Смит.


Поля в базе:
----------------------------
ИМЯ | ФАМИЛИЯ |
----------------------------
Имя1 | Фамилия1 |
Имя2 | Фамилия1 |
Имя3 | Фамилия1 |
Имя4 | Фамилия2 |
Имя5 | Фамилия3 |
Имя6 | Фамилия3 |
----------------------------


Нужно вывести только: Фамилия1, Фамилия2, Фамилия3
а не Фамилия1, Фамилия1, Фамилия1, Фамилия2, Фамилия3, Фамилия3.



Спустя 7 часов, 2 минуты, 25 секунд (23.11.2006 - 09:53) BlackTheMad написал(а):
GROUP BY ФАМИЛИЯ в конце запроса, кажется может тебе помочь.

Спустя 5 часов, 32 минуты, 3 секунды (23.11.2006 - 15:25) artuska написал(а):
Даааааааа... помогло!!! BlackTheMad, Спасибо!!!
Не думал, что так легко...



Тема может быть закрыта.

Спустя 1 час, 59 минут, 36 секунд (23.11.2006 - 17:24) Ghost написал(а):
хм.. ну ваще group by вариант, хоть и извращенный, вообще для таких целей distinсt юзают

Спустя 1 час, 11 минут, 59 секунд (23.11.2006 - 18:36) artuska написал(а):
Ghost, поподробней, пожалуйста.
DISTINCT это в запросе?

А, типа так:
mysql_query("SELECT DISTINCT year FROM фамилия");

Работает!

А как правильней
так
DISTINCT year
или так
DISTINCT (year)
или так
DISTINCT ('year')
или это пофиг как?

Спустя 7 минут, 32 секунды (23.11.2006 - 18:44) Timok написал(а):
QUOTE(from manual)
Параметры (опции) DISTINCT, DISTINCTROW и ALL указывают, должны ли возвращаться дублирующиеся записи. По умолчанию установлен параметр (ALL), т.е. возвращаются все встречающиеся строки. DISTINCT и DISTINCTROW являются синонимами и указывают, что дублирующиеся строки в результирующем наборе данных должны быть удалены.

Спустя 3 минуты, 35 секунд (23.11.2006 - 18:47) artuska написал(а):
Timok, thnx!!!


А как правильней
так
DISTINCT year
или так
DISTINCT (year)
или так
DISTINCT ('year')
или это пофиг как?

Спустя 1 час, 52 минуты, 17 секунд (23.11.2006 - 20:40) Timok написал(а):
QUOTE(artuska)
DISTINCT year
или так
DISTINCT (year)
или так
DISTINCT ('year')

первые два без разницы, а третий не ('year'), а (`year`)

Спустя 18 часов, 7 минут, 16 секунд (24.11.2006 - 14:47) artuska написал(а):
ОК! Всем спасибо!!!
Разобрался - все работает!!!

Спустя 6 месяцев, 16 дней, 1 час, 59 минут, 41 секунда (10.06.2007 - 15:47) Minder написал(а):
А как поступить наоборот?

Поля в базе:
----------------------------
ИМЯ | ФАМИЛИЯ |
----------------------------
Имя1 | Фамилия1 |
Имя2 | Фамилия1 |
Имя3 | Фамилия1 |
Имя4 | Фамилия2 |
Имя5 | Фамилия3 |
Имя6 | Фамилия5 |
Имя7 | Фамилия4 |
Имя8 | Фамилия5 |


нужно вывести ВСЕ дубликаты Фамилий

Спустя 2 часа, 25 минут, 49 секунд (10.06.2007 - 18:13) Секстурист написал(а):
SQL
WHERE `ФАМИЛИЯ`='Фамилия1'


пока других вариантов не знаю

Спустя 4 часа, 5 секунд (10.06.2007 - 22:13) Minder написал(а):
не то.... прост может обратная DISTINCT функция есть?
надо найти все дубликаты в таблице...

Спустя 11 часов, 53 минуты, 21 секунда (11.06.2007 - 10:06) Ghost написал(а):
нет, но есть вариант group by + having как раз для этого случая
SELECT id_man, count(*) as co FROM `table` group by id_man having co>1

но надо понимать, что запросы, использующие having выполняются безобразно долго, т.к оптимизация для having не предусмотрена

Спустя 9 часов, 16 минут, 48 секунд (11.06.2007 - 19:23) Minder написал(а):
Большое спасибо.... все получилось


нашел еще одно решение
Поля в базе:
----------------------------
id| ФАМИЛИЯ |
----------------------------
1 | Фамилия1 |
2 | Фамилия1 |
3 | Фамилия1 |
4 | Фамилия2 |
5 | Фамилия3 |
6 | Фамилия5 |
7 | Фамилия4 |
8 | Фамилия5 |

Код
SELECT DISTINCT Т1.ФАМИЛИЯ
FROM ТАБЛИЦА AS Т1
INNER JOIN ТАБЛИЦА AS Т2 ON Т1.ФАМИЛИЯ = Т2.ФАМИЛИЯ
AND Т1.id <> Т2.id



_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.