mySQL:如何填写这个问题 - 答案表

时间:2010-07-31 20:11:44

标签: mysql

我有5张桌子

Questions_Answers

AID  |  QID  |  otherStuff  |  Username  |  UserID  |  otherStuff

用户

UserID  |  Username

节点

ID  |  Type  |  UserId 

问题

ID  |  oldQ_ID 

答案

ID  |  Question_Link

我必须填写空表Questions_Answers ,并提供其他表格中的信息。

Question_Answer 表应该包含每个答案(行)所属的问题。此外,对于每个答案,用户名和userId。

节点表包含问题和答案。 Type字段有2个可能的值'question'和'answer',指定该行确实是问题还是答案。它包含编写节点的usedId。

问题答案表中,ID字段是新ID 。(我在新系统中导入了这些节点) )。这些是应添加到question_answer表中的ID(AID和QID字段,分别用于答案和问题)。

问题表格中,oldQ_ID应仅用于分配问题的答案,未添加到Questions_Answer表格。

答案表中的Question_Link将每个问题的答案都链接起来,并引用每个问题的旧ID(oldQ_ID)(!)。

还有一件事。我需要在Questions_Answers表中的正确字段中插入字段,跳过无用的字段。

谢谢..

候选解决方案:

INSERT INTO node_comments (cid, nid, name, uid)
  SELECT a.nid, q.nid, u.name, u.uid
  FROM node AS n
  JOIN content_type_answer AS a ON a.nid  = n.nid
  JOIN content_type_forum AS q ON q.field_oldqid_value = a.field_qlink_value
  JOIN users AS u ON u.uid = n.uid
  WHERE n.type = "answer";

1 个答案:

答案 0 :(得分:2)

<强>更新
我更新了使用Node.ID作为Questions表的连接关系的答案。我认为这与你所追求的非常接近,如果它不是很正确的话,改变也不应该太难:

INSERT INTO Questions_Answers (AID, QID, Username, UserID)
  SELECT a.ID, q.ID, u.Username, u.UserID
  FROM Node AS n
  JOIN Users AS u ON u.UserID = n.UserID
  JOIN Questions AS q ON q.oldQ_ID = n.ID
  JOIN Answers AS a ON a.Question_Link = q.oldQ_ID
  WHERE n.Type = "answer";

以下是查询的作用:

  1. 对于Node Typeanswer的{​​{1}}中的每一行:
    • Node.UserIDUsers.UserID进行比较,以查找Users表格中的匹配行。
    • Node.IDQuestions.oldQ_ID进行比较,以查找Questions表格中的匹配行。
    • Questions.oldQ_IDAnswers.Question_Link进行比较,以查找Answers表格中的匹配行。
  2. 从步骤1中的匹配项中选择Answers.IDQuestions.IDUsers.UsernameUsers.UserID,然后将其插入Questions_Answers表。
  3. 如果您需要将Node.ID答案匹配而不是问题,那么您需要Answers.oldA_ID表中的Answers列。您无法将Node.IDQuestions.ID进行比较,因为Node.ID是旧ID,Questions.ID是新ID。