2009-12-16 3 views
1

Это сценарий: Я разрабатываю веб-сайт, похожий на stackoverflow.com. После того, как искатель/искатель разместит свой вопрос, другие пользователи могут опубликовать свои ответы на вопрос. Пользователь может публиковать несколько ответов на один и тот же вопрос, но обычно отображается только последний ответ. Пользователь может дать комментарии по ответу, если комментарии выходят за рамками рассмотрения, SQL-оператор являетсяКак написать эту сложную команду SQL (MySQL)?

mysql_query("SELECT * , COUNT(memberid) AS num_revisions 
FROM (
SELECT * 
FROM answers 
WHERE questionid ='$questionid' 
ORDER BY create_moment DESC 
) AS dyn_table JOIN users 
USING (memberid) 
GROUP BY memberid order by answerid asc")or die(mysql_error()); 

Когда комментарии принимаются в расчет, будет три таблицей. Я хочу выбрать самый последний ответ, который решатель решал по конкретному вопросу, сколько ответов (num_revisions) решатель дал на вопрос, имя решателя, комментарии к последнему ответу. Как написать этот оператор SQL? Я использую MySQL.

Надеюсь, вы сможете понять мой вопрос. Если вы не совсем поняли мой вопрос, просто попросите разъяснений.

Это немного сложнее, чем stackoverflow.com. На stackoverflow.com вы можете дать только один ответ на вопрос. Но на моем сайте пользователь может ответить на вопрос много раз. Но только последний ответ будет серьезно рассмотрен.

Столбцы таблицы комментариев - комментарии, ответ, комментарий, даритель, comment_time. Так что вопрос ---> ответ ----> комментарий.

+3

Вы можете разместить более одного ответа на переполнение стека, насколько я знаю. –

+0

Итак, как написать SQL-запрос? – Steven

ответ

1

Вы можете использовать коррелированный подзапрос, чтобы получить только самый последний ответ на каждого члена. Вот T-SQL, который работает как ваш пример (только ответы на данный вопрос). И вам придется конвертировать в тузд вкус:

select * 
from answers a 
where questionid = '$questionid' 
    and answerid in (select top 1 answerid 
      from answers a2 
      where a2.questionid = a.questionid 
       and a2.memberid = a.memberid 
      order by create_moment desc) 
order by create_moment 

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

-Krip

+0

Столбцы таблицы комментариев - это комментарии, ответ, комментарий, даритель, comment_time. – Steven

+0

Для выполнения задания необходимо включить 3 таблицы, таблицу ответов, таблицу пользователей и таблицу комментариев. – Steven

0

Как об этом (очевидно, ответы будут повторяться, если есть больше чем один комментарий):

выберите * из ответов через левое внешнее соединение с на комментарий c.answerid = a.answerid присоединиться к пользователям Мириэль u.memberi д = a.memberid где QuestionID = 1 и a.answerid в (выбрать верхний 1 answerid из ответов а2 , где a2.questionid = a.questionid и a2.memberid = a.memberid упорядочить по алфавиту create_moment) заказ по a.create_moment, c.comment_time

-Krip

Смежные вопросы