Как написать эту сложную команду SQL (MySQL)? - PullRequest
1 голос
/ 16 декабря 2009

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

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 вы можете дать только один ответ на вопрос. Но на моем сайте пользователь может ответить на вопрос много раз. Но только последний ответ будет серьезно обработан.

Столбцы таблицы комментариев: commentid, answerid, comment, giver, comment_time. Так что это вопрос ---> ответ ----> комментарий.

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

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

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 голосов
/ 16 декабря 2009

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

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

-Krip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...