0

我想编写一个查询而不是运行太多命令来获取问题列表。

有两种用户:访客和注册用户。两者都保存在两种数据库中。

我正在写这个查询,所以请有人解释我如何区分它们。

SELECT * FROM question
LEFT JOIN `user` ON user.`ID` = question.`lastAnswererID`
LEFT JOIN guestusera ON guestusera.aID = question.lastAnswererID 

请记住,用户表可能包含用户的属性,其中只有访客姓名 ID 和电子邮件地址。

现在我想计算声誉,但也不知道如何将它们添加到这个中。

SELECT SUM(reputation) FROM action WHERE userid=?id AND reputation>0

以下 ?id 分别是所有 2 种情况下的 guestusera.aId 和 user.Id(已注册和未注册)。

现在这是关于 lastanswerId 信息。我想从 user 和 guestuserq 获取另一件事是 question.askerId。

现在我可以获得其他信息。我如何区分它们。区分意味着我想知道用户是访客还是注册用户。如果 user.lastanswererId 为 null 则表示用户未注册。

有人指导我如何混合所有这些命令。

 if (rdr["lastAnswererID"] == DBNull.Value)
 {
    UserManager.UserSummary user = new UserManager.UserSummary();
    user.Email = rdr["email"].ToString();
    user.Name = rdr["name"].ToString();
    user.URL = rdr["website"].ToString();
    ques.LastAnswerer = user;
 }
 else
 {
    UserManager.UserSummary userSumm = new UserManager.UserSummary();
    userSumm.ID = Convert.ToInt32(rdr["ID"]);
    userSumm.Name = rdr["name"].ToString();
    userSumm.HasPhoto = Convert.ToBoolean(rdr["hasPhoto"]);
    ques.LastAnswerer = userSumm;
 }

这就是我的 C# 代码处理这个问题的方式。现在有人知道我如何从提出问题的用户表中访问其他用户。有太多用户附加到这个问题。

4

1 回答 1

0

此问题的解决方案可以通过 2 种方式完成。

  1. 在 MySQL 中使用 CASE WHEN END。
  2. MySQL 内部连接。

内部连接更好,因此如果您遇到此问题,您可以使用它。

于 2013-10-31T02:55:56.323 回答