Sql left join

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Две таблицы:
[Table1]
[id] [login] [name] [tema]
1 Nick1 Vasya Моя тема
2 Nick2 Petya Какое танвазние темы
3 Nick3 vasya Ещё одна темы васи
где, login и id уникальные значения т.е они больше не должны повторять в этой таблице
[Table 2]
[id] [id_login] [comments] [id_tema]
1 1 Тут какой то текст коммента 5
2 1 Ещё один коммент этого же пользователя 5
3 3 Эт коммент другого пользователя 5

Теперь сама задача: На страницу выводятся темы, созданые на форуме, нужно сделать, что бы внизу темы выводился последний коммент к ней.
Я делаю такой запрос:
Код:
mysql_query("select * from `tbale1` left join `table2` on `table1`.`id`=`table2`.`id_tema` order by `table2`.`id` desc");
А мне постоянно выводятся все комменты, вместо последнего.. И темы дублируются к каждому комменту..
Можно, конечно, запихать второй запрос в цикл, но это будет не приемлемо. В цикл ведь нельзя запросы совать, правильно?
Код:
$sql=mysql_query("selet * from `table1`");
while($row=mysql_fetch_accos){
$com=mysql_query("selet * from `table2` where `id_tema`='".$row['id']."' order by `id` desc limit 1");
}
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
попробуйте лимит в конце 1 что бы выводил 1 коммент
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
С вложенным запросом можно:

SELECT * FROM table1
LEFT JOIN table2 ON ( table2.id_tema=table1.id AND table2.id=(SELECT id FROM table2 WHERE table2.id_tema=table1.id ORDER BY id DESC LIMIT 1) )
GROUP BY (table1.id)
ORDER BY table1.id DESC
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
С вложенным запросом можно:

SELECT * FROM table1
LEFT JOIN table2 ON ( table2.id_tema=table1.id AND table2.id=(SELECT id FROM table2 WHERE table2.id_tema=table1.id ORDER BY id DESC LIMIT 1) )
GROUP BY (table1.id)
ORDER BY table1.id DESC
Спасибо, работает!
А есть еще третья таблица, такая вот структура:
[id] [id_login] [plyus] [minus] [id_tema]
1 5 1 0 10
2 1 0 1 10
3 2 1 0 10
В ней голосование за эти темы в первой таблице, плюс или минус к каждой теме, по одному голосу с пользователя. Можно ли ещё как-то в ваш запрос вставить подсчет общего число плюсов и минус из этой третей таблицы для каждой темы?
т.е добавить это:
Код:
select sum(`plyus`),`sum`(`minus`)
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Можно в принципе как-то так:

SELECT table1.*,
table2.*,
(SELECT SUM( `plyus` ) FROM table3 WHERE id_tema = table1.id ) AS all_plus,
(SELECT SUM( `minus` ) FROM table3 WHERE id_tema = table1.id ) AS all_minus
FROM table1
LEFT JOIN table2 ON ( table2.id_tema=table1.id AND table2.id=(SELECT id FROM table2 WHERE table2.id_tema=table1.id ORDER BY id DESC LIMIT 1) )
GROUP BY (table1.id)
ORDER BY table1.id DESC
 
Статус
Закрыто для дальнейших ответов.
Верх Низ