Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизЗапрос с max() Найти похожие ветки
← →
SergP © (2004-03-29 22:53) [0]Видно туплю я сегодня... Не могу написать запрос. Подскажите....
Допустим (здесь я упрощаю задачу так чтобы осталось только то что у меня не получается)
Имеется 2 таблицы:
У одной (a)поля:
id (уникальные значения), field1 (любое другое поле).
У второй (b):
id (соотвествует id первой таблицы, но записей с одним id может быть много), field2 (целое число).
Нужно выбрать из обоих таблиц записи с полями поля id (должно быть с уникальным значением), field1, field2 (из всех записей таблицы b с одинаковым id нужно выбрать те у которых field2 максимальное) чтобы where a.id=b.id
БД access & MySQL
← →
Sergey Masloff (2004-03-29 23:02) [1]select a.id, a.fld1, max(b.fld2)
from tbl1 a, tbl2 b
where a.id=b.id
group by a.id, a.fld1
так?
← →
SergP © (2004-03-29 23:10) [2]так...
Вот черт... Понял... Я про group by a.id, a.fld1
забыл... Просто в реальности у меня там много полей аналогичных a.fld1, вот и забыл что по ним тоже нужно групировать. Возможно еще и потому об этом не подумал, что id в первой таблице имеет уникальные значения (и к тому же оно - ключевое поле), и поэтому как-то подсознательно надеялся можно опустить a.fld1...
← →
SergP © (2004-03-30 09:30) [3]На этот раз попробовал изменить запрос в серверной части проги (PHP+MySQL)
select a.topic_id,a.forum_id,a.topic_poster,max(b.post_time) as mtime,a.topic_title
from $t_topics as a, $t_posts as b
where a.topic_id=b.topic_id and mtime>=$ltime and mtime<=$rtime
group by a.topic_id,a.forum_id,a.topic_poster,a.topic_title
order by mtime limit 50
Не работает зараза... Что здесь неправильно?
← →
Johnmen © (2004-03-30 09:35) [4]Вот это
order by mtime limit 50
← →
SergP © (2004-03-30 09:52) [5]Но ведь я делаю:
select ... max(b.post_time) as mtime, ...
Почему тогда нельзя сделать:
where a.topic_id=b.topic_id and mtime>=$ltime and mtime<=$rtime
order by mtime limit 50
И как можно поступить в данной ситуации?
← →
Johnmen © (2004-03-30 10:02) [6]Потому, что так задумано и спроектировано в рамках стандарта SQL. И предназначение алиасов полей другое.
Попробуйorder by 3
← →
SergP © (2004-03-30 13:06) [7]Ок. попробую вечером. А то щас у меня нет возможности добраться до ftp от хостинга...
Но хочу спросить:
Johnmen, Вы обращали мое внимание на order by mtime limit 50,
а как быть с where a.topic_id=b.topic_id and mtime>=$ltime and mtime<=$rtime
будет ли это работать, ведь я здесь тоже использую алиас поля
← →
SergP © (2004-04-02 22:04) [8]Хм.... order by 3 работает.
А вот:
where a.topic_id=b.topic_id and mtime>=$ltime and mtime<=$rtime
ти так не хочет работать, ни так:
where a.topic_id=b.topic_id and max(b.post_time)>=$ltime and max(b.post_time)<=$rtime
Что делать?
← →
SergP © (2004-04-02 22:09) [9]Можно было бы обойтись вложенным запросом, но MySQL их не поддерживает. :(((
← →
Zacho © (2004-04-02 22:31) [10]Я сейчас не совсем трезв :), но может тебя спасет
HAVING max(b.post_time)>=$ltime and max(b.post_time)<=$rtime ?
← →
SergP © (2004-04-02 22:59) [11]написал так:
select a.topic_id,a.forum_id,a.topic_poster,max(b.post_time) as mtime,a.topic_title
from $t_topics as a, $t_posts as b
where a.topic_id=b.topic_id
group by a.topic_id
HAVING mtime>=$ltime and mtime<=$rtime
order by mtime
limit 50
Все работает. Большое спасибо...
наверное меня спасло то, что
>Zacho © (02.04.04 22:31)
>Я сейчас не совсем трезв
Люди в таких ситуациях иногда очень правильно мыслят... :)))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c