【问题标题】:Forming Querys based on other Queries?基于其他查询形成查询?
【发布时间】:2014-12-16 21:53:27
【问题描述】:

我有这样的表格设置:

用户表:

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) 我需要第二个查询,它将为我提供每个类别中有答案的问题的所有答案、回答问题的人的用户名和他们的声誉。

我将如何实现这一目标?如果您需要更多详细信息,请随时询问。

【问题讨论】:

    标签: php mysql sql database codeigniter


    【解决方案1】:

    实际上,我完全不知道为什么会这样。您的初始查询中有非聚合字段不在 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
    

    【讨论】:

    • 我不止一次听说我的查询实际上是如何工作的,哈哈,它在工作时没有帮助,但它的错误原因然后我看不到问题编辑:谢谢这解决了 1我的许多问题 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多