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

时间:2012-05-24 23:23:00

标签: php mysql sql database

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

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

现在我在数据库中有25行,其中包含关键字“Question”,所以如果我在搜索框中输入关键字“Question”,我会在输出中显示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

2 个答案:

答案 0 :(得分:4)

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

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

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

但是在您的SQL查询中添加GROUP BY将是一个良好的开端。

另请告诉我$each正在使用mysql_real_escape_string

进行转义

答案 1 :(得分:1)

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