2

ご覧のとおり、キーワードが入力された場合に上記で使用したクエリは次のとおりです。

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

これで、データベースにキーワード「Question」が含まれる25行があるので、検索ボックスにキーワード「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%';

ここで、「質問」という単語をもう一度検索すると、結果に25行ではなく125行が表示されることになります。なぜこれを行うのでしょうか。また、これを修正する方法を知っている人はいますか。

以下は質問テーブルのフィールドです。

QuestionId, QuestionContent, ReplyId

以下は回答テーブルのフィールドです。

QuestionId, Answer

以下は、返信テーブルのフィールドです。

ReplyId, ReplyType
4

2 に答える 2

4

与えられた情報で良い答えを出すのは難しいでしょうが、質問ごとに複数の回答があり、質問ごとに複数の回答があると思います.

データをどのように照会するかを考える必要があります。質問ごとに 1 つの行を一致させたい場合は、GROUP BYQuestionId取り除く必要がありSELECT *ます。

これに対する「修正」はありません。データの検索方法に最適なソリューションを設計する必要があります。

ただしGROUP BY、SQL クエリに a を追加することは、良いスタートになります。

$eachまた、エスケープされていることを教えてくださいmysql_real_escape_string

于 2012-05-24T23:49:51.863 に答える
1

質問ごとに複数の回答がある場合 (私が想像するように)、回答ごとに同じ質問が返されます。GROUP BY現時点ではこのクエリに , またはを使用できますがSELECT DISTINCT、各回答から情報が必要な場合は問題になります。

于 2012-05-24T23:30:16.343 に答える