Вообщем, есть таблица, в ней есть колонка "фамилия". Эти самые фамилии - они могут повторяться (например, если в базу записана инфа про семью Смитов (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')
или это пофиг как?
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')
или это пофиг как?
А как правильней
так
DISTINCT year
или так
DISTINCT (year)
или так
DISTINCT ('year')
или это пофиг как?
Спустя 1 час, 52 минуты, 17 секунд (23.11.2006 - 20:40) Timok написал(а):
QUOTE(artuska)
DISTINCT year
или так
DISTINCT (year)
или так
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 |
нужно вывести ВСЕ дубликаты Фамилий
Поля в базе:
----------------------------
ИМЯ | ФАМИЛИЯ |
----------------------------
Имя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 не предусмотрена
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 |
нашел еще одно решение
Поля в базе:
----------------------------
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
FROM ТАБЛИЦА AS Т1
INNER JOIN ТАБЛИЦА AS Т2 ON Т1.ФАМИЛИЯ = Т2.ФАМИЛИЯ
AND Т1.id <> Т2.id
_____________