查询结果的输出显示更多的行,然后它应该做


output of query result shows more rows then it should do

现在,如您所见,如果输入关键字,我在上面使用的查询是这样的:

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

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

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

没有"修复"方法,您需要设计最适合数据搜索方式的解决方案。

但是,向 sql 查询添加GROUP BY将是一个良好的开端。

另外请告诉我$eachmysql_real_escape_string逃脱

如果你每个问题有多个答案(正如我想象的那样),你会得到每个答案的相同问题。您可以使用 GROUP BYSELECT DISTINCT 进行此查询,就像目前一样,但是当您想要从每个答案中获得内容时,这将是一个问题。