1

Тема: Помогите составить запрос, нужно найти уникальные значения

Привет.
Есть база данных на mysql`е.
Есть таблица table_1, в которой есть поля id, fname, lname, email, phone.
Поле id является первичным ключом. Больше ключей нет.
Нужно выбрать fname, lname, email, где поле email будет уникальным.

Если сделать так:
Код:

SELECT DISTINCT email FROM table_1 ORDER BY email;


то в результате получается 780 уникальных значений email. Но мне нужно с полями fname и lname.

Если сделать так:
Код:

SELECT fname, lname, email, COUNT(email) AS count
FROM table_1
GROUP BY email
HAVING count =1
ORDER BY count DESC


то в результате получается только 700 уникальных значений по полю email. 

Куда-то потерялись 80 записей, что не есть гуд.
подскажите пожалуйста:
- как правильно составить запрос по поиску уникальных значений ;
- почему получается такая разница в описанных выше запросах.

Спасибо!

2

Re: Помогите составить запрос, нужно найти уникальные значения

Andrey K.

SELECT * FROM `table_1` GROUP BY `email`;

3

Re: Помогите составить запрос, нужно найти уникальные значения

Hanut сказал:

Andrey K.

SELECT * FROM `table_1` GROUP BY `email`;

Здравствуйте..
один момент..
как сделать так, чтобы уникальные значения email постоянно менялись в случайном порядке?
т.е. скажем почтовые ящики одинаковые, а имена разные..
как правильно составить запрос по выдергиванию уникальных email но разными именами?

email              name

mail@mail       петров
mail@mail       сидоров
mail@mail       иванов


Если сделать так:
Код:

SELECT * FROM `table_1` GROUP BY `email`;
то постоянно выходит - петров

4

Re: Помогите составить запрос, нужно найти уникальные значения

Nikolai

SELECT * FROM `table_1` GROUP BY `email`, `name`;

Или, если нужны только уникальные адреса:

SELECT DISTINCT `email` FROM `table_1`;

5 (изменено: Nikolai, 2009-10-02 12:38:36)

Re: Помогите составить запрос, нужно найти уникальные значения

Nikolai сказал:
Hanut сказал:

Nikolai

SELECT * FROM `table_1` GROUP BY `email`, `name`;

выводятся все значения (не уникальные тоже)

Hanut сказал:

Nikolai
Или, если нужны только уникальные адреса:

SELECT DISTINCT `email` FROM `table_1`;

ищет уникальные по всем полям (есть еще дополнительные поля)

SELECT DISTINCT `email`, `phone`, `typel` и т.д.  FROM `table_1`;

а так как поля `phone`, `typel` и т.д. уникальные.. то выводит все
-----------------------------------------------


допустим:

email                 name

mail@mail          пертров
mail@mail          сидоров
mail@mail          иванов
gmail@gmail       чижиков
gmail@gmail       пыжиков

результат должен быть такой -

1)mail@mail          пертров
2)gmail@gmail       чижиков

при обновлении

1)mail@mail          иванов
2)gmail@gmail       пыжиков

т.е. поле email только уникальные, а поле name изменяется в случайном порядке

так работает отлично, только результат поля name не меняется:(
SELECT * FROM `table_1` GROUP BY `email`;

6

Re: Помогите составить запрос, нужно найти уникальные значения

Nikolai
Я бы сделал два запроса: первый вибирающий все уникальные адреса, второй выбирающий случайные имена.

SELECT DISTINCT `email` FROM `table_1`;
-- Далее разбираем все адреса и по каждому выбираем имя.
SELECT `name`, RAND() AS `rand` FROM `table_1` WHERE `email` = "mail@mail" ORDER BY `rand` LIMIT 1;

7

Re: Помогите составить запрос, нужно найти уникальные значения

Hanut сказал:

Nikolai
Я бы сделал два запроса: первый вибирающий все уникальные адреса, второй выбирающий случайные имена.

SELECT DISTINCT `email` FROM `table_1`;
-- Далее разбираем все адреса и по каждому выбираем имя.
SELECT `name`, RAND() AS `rand` FROM `table_1` WHERE `email` = "mail@mail" ORDER BY `rand` LIMIT 1;
Hanut сказал:

Nikolai
Я бы сделал два запроса: первый вибирающий все уникальные адреса, второй выбирающий случайные имена.

SELECT DISTINCT `email` FROM `table_1`;
-- Далее разбираем все адреса и по каждому выбираем имя.
SELECT `name`, RAND() AS `rand` FROM `table_1` WHERE `email` = "mail@mail" ORDER BY `rand` LIMIT 1;

с первым ясно, а вот со вторым не совсем..
WHERE `email` = "mail@mail" ???
это что? сколько будет адресов столько и запросов? по колхозному как-то..
может другие варианты?

8

Re: Помогите составить запрос, нужно найти уникальные значения

Nikolai сказал:

WHERE `email` = "mail@mail" ???
это что? сколько будет адресов столько и запросов? по колхозному как-то..

Именно так. Можно написать процедуру и использовать временную таблицу, но по сути будет то же самое.