mysql выборка

M
На сайте с 20.08.2004
Offline
376
2936

есть три таблицы

пользователи, блог, комментарии к блогам

хочу вывести Х последних комментариев с их авторами

SELECT tc.comment_id, t.talk_id, talk_topic, u.user_email, u.user_nickname
FROM bt_talk_comment tc
LEFT JOIN bt_talk t ON t.talk_id = tc.talk_id
LEFT JOIN bt_user u ON u.user_id = tc.user_id
WHERE tc.comment_activity=1
GROUP BY t.talk_id
ORDER BY tc.comment_id DESC
LIMIT 5

Выводит правильно все, кроме авторов, те в данном случае выводит в порядке убывания темы блога (те как надо) но вот автора подписывает первого кто написал коммент к блогу

Как побороть такое ?

Спасибо.

отец сыночка, лапочки дочки и еще одного сыночка
[Удален]
#1

GROUP BY t.talk_id

вот тут у вас происходит то, что вы видите

N
На сайте с 06.05.2007
Offline
419
#2
Х последних комментариев с их авторами

Зачем вы ПОСТОЯННО используете left join ? много у вас комментариев "от НЛО" ?

Кнопка вызова админа ()
M
На сайте с 20.08.2004
Offline
376
#3
bearman:
GROUP BY t.talk_id

вот тут у вас происходит то, что вы видите

это понятно а как решить не понятно.

netwind:
Зачем вы ПОСТОЯННО используете left join ? много у вас комментариев "от НЛО" ?

простите, немного не понял вопроса :)

[Удален]
#4
простите, немного не понял вопроса

вы бы поняли если бы знали разницу межде inner join/ join/ left join/ right join/ outer join и прочими вещами :)

лечится легко .. но для этого надо дампы таблиц

E
На сайте с 01.09.2009
Offline
21
#5

А вы не пробовали вместо GROUP BY использовать в начале (при выборке) DISTINCT(...)

Качественные шаблоны (http://sohib.ru/gallery/ru/index.html) Генератор анкоров SAPE (http://sohib.ru/generator/ru/index.html)
N
На сайте с 06.05.2007
Offline
419
#6
Miracle:
простите, немного не понял вопроса

Я заметил, что некоторые использую слово LEFT везде - /ru/forum/403218. В моей практике было еще пару случаев. То есть вы четвертый. Кто вас этому учит?

Обычно метод выполнения когда mysql ожидает null-значения отличается и значительно хуже простого объединения.

M
На сайте с 20.08.2004
Offline
376
#7
bearman:
вы бы поняли если бы знали разницу межде inner join/ join/ left join/ right join/ outer join и прочими вещами

в двух словах можно, лично я никогда особой разницы не видел. :)

дамп с данными или просто дамп таблиц?

сейчас подготовлю

eXpert_:
А вы не пробовали вместо GROUP BY использовать в начале (при выборке)DISTINCT(...)

не пробовал, но сомневаюсь что сработает. сейчас попробую..

Dreammaker
На сайте с 20.04.2006
Offline
569
#8
Miracle:
в двух словах можно, лично я никогда особой разницы не видел.

inner join - это по сути тоже что и = в where,

join вроде тоже самое,

left join - это когда берётся одна таблица, и к ней присоединяется вторая, без оглядки есть там соответствия или нет, когда нет, то в эту ячейку ставится null,

right join - тоже самое только таблицы по смыслу местами меняются

outer join - сейчас лень смотреть, никогда не испльзую, не помню. :)

[Удален]
#9

уговорили, помогу =)

http://www.codinghorror.com/blog/archives/000976.html

M
На сайте с 20.08.2004
Offline
376
#10
Dreammaker:
inner join - это по сути тоже что и = в where,
join вроде тоже самое,
left join - это когда берётся одна таблица, и к ней присоединяется вторая, без оглядки есть там соответствия или нет, когда нет, то в эту ячейку ставится null,
right join - тоже самое только таблицы по смыслу местами меняются
outer join - сейчас лень смотреть, никогда не испльзую, не помню.

точно такими же знаниями обладаю и я по ЖОЙНАМ, но я так и не понял как это может помочь?!

Miracle добавил 04.10.2009 в 15:39

bearman:
уговорили, помогу =)

http://www.codinghorror.com/blog/archives/000976.html

спасибо за картинки, наглядно, но что бы помогло так не сказал бы :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий