Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
А не проще ли развернуть запрос? Сначала выбрать fancy, (MaxDate), потом слить их с таблицей имен? 22.07.08 11:56 Число просмотров: 1844
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 22.07.08 12:07 Количество правок: 2
|
SELECT s.Fancy, MIN(s.date), f.title
FROM `sess` s
RIGHT JOIN Fancy F On f.id_fancy=s.Fancy
Group by s.Fancy
Да и нагрузка на БД меньше:
-------------------
EXPLAIN SELECT t.title, min( t.date )
FROM ( SELECT f.title, s.date FROM fancy f JOIN sess s ON s.fancy = f.id_fancy )t GROUP BY t.title
d select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 28 Using temporary; Using filesort
2 DERIVED s ALL NULL NULL NULL NULL 28
2 DERIVED f ALL PRIMARY NULL NULL NULL 4 Using where
-----------------
SELECT s.Fancy, MIN(s.date), f.title FROM `sess` s
RIGHT JOIN Fancy F On f.id_fancy=s.Fancy Group by s.Fancy
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE F ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
1 SIMPLE s ALL NULL NULL NULL NULL 28
> Столкнулся с такой задачей: Выбрать все title из > Fancy и для каждого из них выбрать минимальную дату из > Sess. > > Fancy: > id_Fancy > title > > Sess: > id_Sess > Fancy > date > > Лучшее, что получилось – это > $res = mysql_query("SELECT f.id_Fancy, f.title, > s.date FROM Sess as s RIGHT JOIN Fancy as f ON > f.id_Fancy=s.Fancy"); > > Этот запрос выводит почти то, что нужно. «Почти» потому что > он для каждой даты из Sess выводит отдельную строку, а > нужно чтобы была одна. > > Попробовал разобраться с оператором DISTINCT (ставил его > перед f.id_Fancy), но эффекта не дало. > > Такой запрос вообще ничего не вворачивает > $res = mysql_query("SELECT f.id_Fancy, f.title, > s.date FROM Sess as s RIGHT JOIN Fancy as f ON > f.id_Fancy=s.Fancy WHERE (s.date = (SELECT MAX(s.date) FROM > s WHERE f.id_Fancy=s.Fancy))");
|
|
|