Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Помогите с запросом (Сложное условие)


Автор: Satellence 4.5.2012, 00:28
Суть:
2 таблицы

tasks (`id`, `title` ...)
task_answer (`id`, `task_id`, `text`...)

Делаю запрос, выводящий одновременно все задачи и количество ответов на него
Код

SELECT `tasks`.`id`,`tasks`.`title`, COUNT(`task_answer`.`id`) AS 'count'
FROM `tasks`
LEFT OUTER JOIN `task_answer`
  ON (`tasks`.`id` = `task_answer`.`task_id`) 
 
GROUP BY `task_answer`.`task_id`


Выводит только задачи, на которые есть ответы. Т.е. не выводит задачи без ответов. 

Автор: Akina 4.5.2012, 08:37
Код

GROUP BY `tasks`.`id`,`tasks`.`title`

?

Автор: igorold 4.5.2012, 11:30
Достаточно:

Код

GROUP BY `tasks`.`id`

Автор: Satellence 4.5.2012, 11:42
Да, верно.. Спасибо, я бы и не подумал туда посмотреть )
тут еще вопрос образовался - нужно к этому запросу добавить последний id ответа.
Т.е. 
Код

SELECT `tasks`.`id`,`tasks`.`title`, COUNT(`task_answer`.`id`) AS 'count', `task_answer`.`user_id` AS 'last'
FROM `tasks`
LEFT OUTER JOIN `task_answer`
  ON (`tasks`.`id` = `task_answer`.`task_id`) 
GROUP BY `tasks`.`id`
ORDER BY `tasks`.`create_time` DESC, `task_answer`.`id` DESC


выдает автора самого первого сообщения.. хочется последнего =)

Автор: igorold 4.5.2012, 11:56
Как вариант вставить в select:
Код


max(`task_answer`.`id`)

Автор: Satellence 4.5.2012, 12:33
Нет результата.
id ответа действительно выводит последний, но user_id первый.

Автор: igorold 4.5.2012, 12:35
... конечно, вы же сами захотели последний id ответа ...  smile 

Автор: Satellence 4.5.2012, 12:36
Это оговорка ) нужен id пользователя, который оставил последний ответ. 
В запросе, собственно, я и пытаюсь взять user_id 

Автор: Akina 4.5.2012, 14:09
Цитата(igorold @  4.5.2012,  12:30 Найти цитируемый пост)
Достаточно:

Только при условии, что id - уникальный.

Автор: igorold 4.5.2012, 14:22
Попробуйте что-то типа этого:

S
Код

SELECT *, count(ta) AS count FROM (

SELECT `tasks`.`id` as tid,`tasks`.`title`, `task_answer`.`id` as ta, `task_answer`.`user_id` AS 'last'
FROM `tasks`
LEFT OUTER JOIN `task_answer`
  ON (`tasks`.`id` = `task_answer`.`task_id`)
  ORDER BY `tasks`.`create_time` DESC, `task_answer`.`id` DESC

) as tmp group by tid;



Добавлено через 2 минуты и 4 секунды
Цитата(Akina @ 4.5.2012,  14:09)
Цитата(igorold @  4.5.2012,  12:30 Найти цитируемый пост)
Достаточно:

Только при условии, что id - уникальный.

Конечно, в данном случае, я считал, что это подразумевается ... 

Автор: Zloxa 5.5.2012, 08:36
Цитата(Akina @ 4.5.2012,  15:09)
Цитата(igorold @  4.5.2012,  12:30 Найти цитируемый пост)
Достаточно:

Только при условии, что id - уникальный.

Так же при условии, что это будет испльзовано ТОЛЬКО на MySQL  smile

Добавлено через 2 минуты
Цитата(Satellence @  4.5.2012,  13:36 Найти цитируемый пост)
нужен id пользователя, который оставил последний ответ. 

stff http://forum.vingrad.ru/act-Search/CODE/show/searchid-0aeb7f327c30a8b8e243123f33fc021c/search_in-posts/result_type/posts/flag/search/highlite/%25D0%25B1%25D0%25B0%25D0%25B1%25D1%2583%25D1%2588%25D0%25BA%25D0%25B8%25D0%25BD+%25D0%25BC%25D0%25B5%25D1%2582%25D0%25BE%25D0%25B4/index.html

Автор: Akina 5.5.2012, 08:44
Цитата(Zloxa @  5.5.2012,  09:36 Найти цитируемый пост)
при условии, что это будет испльзовано ТОЛЬКО на MySQL  

Ну на это можно надеяться, исходя из того, в каком разделе размещается вопрос... 

Автор: Zloxa 5.5.2012, 08:57
Цитата(Akina @ 5.5.2012,  09:44)
Цитата(Zloxa @  5.5.2012,  09:36 Найти цитируемый пост)
при условии, что это будет испльзовано ТОЛЬКО на MySQL  

Ну на это можно надеяться, исходя из того, в каком разделе размещается вопрос...

Надеяться на это можно ровно с тем же успехом, как и надеяться на униакальность поля, названного ID.  smile 

Автор: Satellence 5.5.2012, 09:23
id уникален, иначе это был бы не id ;)
Спасибо большое, все работает =)
Впрочем, хочется еще одну фишку в запрос прикрутить, но я снова сначала самостоятельно попробую.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)