2

现在你可以看到如果输入了关键字,我在上面使用的查询是这样的:

SELECT * FROM Question WHERE QuestionContent LIKE '%$each%';

现在我在数据库中有 25 行包含关键字“问题”,所以如果我在搜索框中输入关键字“问题”,我会在输出中显示 25 行,这是正确的。

问题是我需要将其他表内部连接到查询中,因为将来我需要能够查看其他表中字段的行,所以我将查询更改为以下内容:

SELECT * FROM Answer a               
INNER JOIN Question q ON a.QuestionId = q.QuestionId
                 JOIN  Reply r ON q.ReplyId = r.ReplyId
                 WHERE QuestionContent LIKE '%$each%';

现在,如果我再次搜索“问题”这个词,我最终会在结果中显示 125 行,而不是 25 行。为什么要这样做,有人知道如何解决这个问题吗?

以下是问题表字段:

QuestionId, QuestionContent, ReplyId

以下是答案表字段:

QuestionId, Answer

以下是回复表字段:

ReplyId, ReplyType
4

2 回答 2

4

给出的信息很难给出一个好的答案,但我猜每个问题都有多个答案,每个问题有多个回复。

您将不得不考虑如何查询数据,如果您真的希望每个问题匹配一行,那么您需要GROUP BYQuestionId意味着摆脱SELECT *.

对此没有“修复”,您需要设计一个最适合数据搜索方式的解决方案。

但是GROUP BY在你的 sql 查询中添加一个将是一个好的开始。

另外请告诉我$each正在逃脱mysql_real_escape_string

于 2012-05-24T23:49:51.863 回答
1

如果您对每个问题有多个答案(正如我想象的那样),您将得到每个答案的相同问题。您可以使用GROUP BY, 或SELECT DISTINCT目前的查询,但是当您想要从每个答案中获取内容时,这将是一个问题。

于 2012-05-24T23:30:16.343 回答