现在您可以看到我在上面使用的查询,如果输入关键字是:
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
答案 0 :(得分:4)
要给出的信息很难给出一个好的答案,但我猜每个问题有多个答案,每个问题都有多个答案。
你必须考虑如何查询你的数据,如果你真的希望每个问题匹配一行,那么你需要GROUP BY
QuestionId
这意味着摆脱SELECT *
。
对此没有“修复”,您需要设计一个最适合搜索数据的解决方案。
但是在您的SQL查询中添加GROUP BY
将是一个良好的开端。
另请告诉我$each
正在使用mysql_real_escape_string
答案 1 :(得分:1)
如果每个问题有多个答案(正如我想象的那样),你会得到每个答案的相同问题。您可以使用GROUP BY
或SELECT DISTINCT
作为此查询,但当您需要每个答案中的内容时,这将是一个问题。