Задавайте вопросы, мы ответим
Вы не зашли.
Есть 3 таблицы
1: logins (id,name)
2: ads (id)
3: ads_history(adid,loginid,timestamp)
Хочу получить такой результат:
login.name | ads_history max(timestamp) for this adid | ads_history min(timestamp) for this adid
Для выборки logins.name получается подзапрос
SELECT adid,(SELECT login from logins WHERE id=ads_history.loginid) as login FROM `ads_history` GROUP by adid
а вот как максимальные значения timestamp выбрать для соответствующих ads.id из ads_history - НЕ ПОЛУЧАЕТСЯ;
пол дня уже убил на это, помогите если можете
Отредактированно RusAlex (27.06.2010 13:05:21)
Неактивен
Неактивен
) а ведь сам пробовал
Неактивен
Но лучше переписать без использования подзапроса, так как в данном случае он выполняется избыточное количество раз (часть результатов потом удалиться за счет использования group by). Правильно ли я понимаю, что у вас для фиксированого значения adid loginid одно и тоже?
Неактивен
vasya написал:
Правильно ли я понимаю, что у вас для фиксированого значения adid loginid одно и тоже?
нет. adid i loginid в ads_history могут быть различны
adid loginid
1 1
1 2
1 3
2 1
2 2
2 3
Неактивен
и потом еще надо будет оставить возможность сортировки по всем этим полям
Неактивен
А как же вы в таком случае группируете по adid, не используя группирующую функцию для loginid?
Какое значение loginid вы при этом ожидаете получить? Оно может быть произвольным.
Неактивен
да надо группировать по loginid тоже. спасибо что заметили
Неактивен
Vasya получилось так:
Неактивен
Теперь добавляете в конец запроса HAVING и пишите нужные условия.
Но лучше сначала выбрать необходимые строки из logins, а затем объединять с `ads_history` и ads.
Неактивен
vasya написал:
Но лучше сначала выбрать необходимые строки из logins, а затем объединять с `ads_history` и ads.
как это сделать ?
как я понимаю надо создать временную объединенную таблицу для моей выборки и уже работать с ней. Но не хватает у меня знаний в mysql очень.
Отредактированно RusAlex (27.06.2010 14:39:26)
Неактивен
Нет, временная объединенная таблица не нужна. Просто подзапрос используется в части FROM.
В приведенном ниже примере выборка из таблицы `ads_history` обозначается как t1, а из logins как t2. И далее запрос работает с таблицами t1,t2.
SELECT * FROM
(SELECT adid,loginid, max(timestamp) as max_timestamp, min(timestamp) as min_timestamp FROM `ads_history` GROUP by adid,loginid) t1
JOIN (SELECT * FROM logins WHERE условия выборки)t2 ON t1.loginid=t2.id ......
Подробнее синтаксис join см http://dev.mysql.com/doc/refman/5.1/en/join.html
Неактивен