2014-12-16 3 views
0

У меня есть настройки таблицы, как это:Формирование запросов на основе других запросов?

Пользователи Таблица:

ID | Username | Password 
1 | Humza | 123 
3 | God | 145 

Вопросы Таблица:

Question_ID| Question_Title | Question  | Rating | Category ID | User ID | 
    1  | Testing Display | Did it Work | 55 |  2  | 3 | 
    2  | Foo is love?  | Same as Above | -100 |  2  | 1 | 
    3  | Bla    | Baa Black XD | 909 |  2  | 1 | 

Ответ Таблица:

Answer_ID| Answer | Answer_Rating  | Answer_User_ID | Question_ID | 
1  | YES  |  909   |  1    |  2  | 
2  | Wohoo |  15   |  3    |  2  | 

Репутация Таблица:

Reputation_ID| Reputation | User_Rep_ID| 
1   | -50  |  1  | 
2   | 9999  |  3  | 

Категория Таблица:

Category_ID | Category  | 
1   | Dr Who   |  
2   | Programming  | 
3   | Music   | 

Мой существующий запрос, чтобы выбрать вопросы из категории 2:

SELECT u.username, r.Reputation, q.Question_Title, 
q.Question, q.Rating, c.Category, count(a.Answer_ID) as num_answers 

FROM Questions q 
INNER JOIN Users u ON u.id = q.User_ID 
INNER JOIN Reputation r on r.User_Rep_ID = u.id 
INNER JOIN Categorys c ON c.Category_ID = q.Category_ID 
LEFT OUTER JOIN Answers a on q.Question_ID = a.Question_ID 
WHERE q.Category_ID = 2 
GROUP BY a.Question_ID 

Однако по какой-то причине это не заберет из третьего вопроса, так что это не идеально.

Текущий запрос, чтобы выбрать ответы:

SELECT u.username as AnswerUserName, 
a.Answer, a.Answer_Rating, r.Reputation as AnswerReputation 

FROM Answers a 
INNER JOIN Users u ON u.ID = a.Answer_User_ID 
INNER JOIN Questions q on q.Question_ID = a.Question_ID 
LEFT OUTER JOIN Reputation r ON r.User_Rep_ID = u.ID 

WHERE a.Question_ID = q.Question_ID 

Однако это, кажется, просто выбрать оба ответа, независимо от того, если вопрос имеет ответ или нет. таким образом, когда я запрашиваю все вопросы в категории 1, будут отображаться одни и те же ответы, и я не уверен, почему.

Сейчас я попытаюсь объяснить в меру моих способностей:

1) Мне нужно 3 Отдельный вопрос, который подберет мне все вопросы в категории 1, 2 и 3, а также пользователей, которые разместил их и их репутацию. В дополнение к этому, он должен также подсчитывать количество ответов на каждый вопрос в каждой категории. Редактировать - Готово

2) Мне нужен второй запрос, который даст мне ответы на вопросы, на которые есть ответы в каждой категории, имя пользователя, ответившего на вопрос и его репутацию.

Как бы я мог достичь этого? Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

ответ

0

Я не уверен, почему это вообще работает. У вас есть неагрегатные поля в исходном запросе, которые не указаны в инструкции GROUP BY. Кроме того, поскольку вы знаете, что не каждый вопрос будет иметь ответ, я бы не группировал группу A.Question_ID - вместо q.question_Id. Попробуйте это:

SELECT u.username, r.Reputation, q.Question_Title, 
q.Question, q.Rating, c.Category, count(a.Answer_ID) as num_answers 
FROM Questions q 
INNER JOIN Users u ON u.id = q.User_ID 
INNER JOIN Reputation r on r.User_Rep_ID = u.id 
INNER JOIN Categorys c ON c.Category_ID = q.Category_ID 
LEFT OUTER JOIN Answers a on q.Question_ID = a.Question_ID 
WHERE q.Category_ID = 2 
GROUP BY u.username, r.Reputation, q.Question_Title, 
q.Question, q.Rating, c.Category 
+0

Я слышал, что больше, чем когда-то о том, как мой запрос на самом деле работает лол, это не помогает, когда он работает, но его неправильно причина, то я не вижу проблемы EDIT: Спасибо Это решало 1 из моих многочисленных проблем =) – ShatteredPheonix

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