Сложный запрос с DISTINCT

Sirius

PHP+MySQL=LOVE
Сложный запрос с DISTINCT

У меня есть примерно такая таблица:
id name mail info
1 ee [email protected] --
2 ee [email protected] none
3 er [email protected] yes
4 ww [email protected] none
5 we [email protected] --
6 ewe [email protected] --
7 weq [email protected] --

Мне нужно вытащить все записи (А не только mail) с уникальными значениями mail, для рассылки, то есть:
SELECT DISTINCT mail FROM TABLE; //но нужно всё, то есть *

Я сам понимаю, что это глупо, так как мускул не знает, какую именно строчку из уникальных я захочу, а мне нужна именно последняя из уникальных. То есть строки 3, 4, 6, 7

Такое возможно? Другой способ есть кроме DISTINCT?
 

Demiurg

Guest
select max(a.id) mmax, b.* from table a , table b
group by a.mail , b.id
having b.id = mmax
 

Crazy

Developer
Джентельмены, а какой смысл говорить о последней строке выборки, в которой не задана сортировка? :)
 

chira

Новичок
я бы еще условие добавил
WHERE a.mail=b.mail

этот SQL можно использовать для небольших таблиц.
 

Sirius

PHP+MySQL=LOVE
Demiurg - Спасибо:)

Crazy - да согласен:)

Боюсь, что я логически всё равно проиграю. Так что нужно будет выбрать или уникальный мейл, или простой DISTINCT mail.
 

Demiurg

Guest
Спамит он :)
кстати данные нужно нормализовать, тогда не придется такие убийственные запросы строить.
 

Sirius

PHP+MySQL=LOVE
Задача - не спам. Портал типа Нюк под спец-клиентский запрос. Данный кусок, отправить юзерам письма от админа сайта. В письме (для забывчивых юзеров) нужно указать их ИД и пароль (круто да?:))...

Я теперь так думаю, придётся в одном письме писать все зарегенные под этим мейлом ИД и их пароли:) Галематья получается - но клиент всегда прав :)

Наверное придётся сделать так - создать новую временную таблицу по выборке админа, со всеми нужными полями, и уже по этой таблице и спам.... тьфу ты, и рассылать емейлы юзерам:)
 

Crazy

Developer
Как я понял задачу:

1. Есть таблица, где лежат ID, пароль и адрес. Адреса могут повторяться.

2. Нужно ВСЕМ пользователям отправить письма, в которых указаны пароль и логин.

Если нужно группировать в одно письмо несколько ID -- достаточно отсортировать выборку по адресу.

Если нужно рассылать каждый ID отдельным письмом -- не нужна даже сортировка.

В любом случае не вижу, где и зачем нужен distinct.
 

Sirius

PHP+MySQL=LOVE
Да, Crazy, Прошу прощения - постановку задачи поменял просто!

Когда писал первый пост я расчитывал на 1000000 юзеров, который собирается собрать клиент на своём портале и соответственно рассылка упадёт. Я хотел брать последний ИД и записывать как промежуточный ИД перед очередной порцией рассылки, но тогда ты меня поправил сортировкой, и я понял, что это невозможно!

Всем спасибо!
 

mahoune

Guest
соответственно рассылка упадёт
Упадет только если канал не выдержит!
 

Crazy

Developer
Автор оригинала: Sirius
Я хотел брать последний ИД и записывать как промежуточный ИД перед очередной порцией рассылки
IMHO, стоит просто разделить процесс на две фазы:

1. Составление списка для рассылки.
2. Рассылка по списку (взяли - отправили - удалили).
 
Сверху