从多个表中选择然后加入

时间:2014-06-06 16:30:04

标签: php mysql

我是新来的,我希望我正确地问我的问题: 我正在尝试在论坛数据库上实现搜索。  我有'问题'表和'答案'表(它们都与'id_question'字段相关)。我还有'建议'表和'评论'表也是相关的。 另外,我有'profiles'表,它与我之前提到的'profile_id'字段相关的每个表有关,这个profile表保存了用户的信息。

我想在我之前提到的所有四个表中对特定字段('主题','描述'...)实施广泛搜索,并显示这些字段以及撰写帖子的用户的信息。 我真的搞砸了。 现在我有4个查询(对于每个表),并且每个查询都使用profiles表进行连接。 你知道更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

是的,在四个查询中执行此操作。

否则,当您尝试加入表格时,您将获得Cartesian product

答案 1 :(得分:0)

我认为您可以尝试使用UNION。不是吗?

答案 2 :(得分:0)

您可以使用INNER JOINS执行此操作。我建议从一些简单的INNER JOINS开始,并构建您的查询以更具包容性并加入更多表。这完全取决于你真正想要得到的东西。在准确返回您想要的信息时尽可能精确。

这是一个简单的例子和​​我做的假设:

假设如下 table:primarykey *,foreignkey#,othercolumns

questions: id_questions*, topic, description, profile_id#
answers: id_answers*, id_questions#, topic, description, profile_id#
suggestions: id_suggestions*, topic, description, profile_id#
comments: id_comments*, topic, description, profile_id#
user: profile_id*, name, details

关键字:替换为您的关键字或词组

在问题和答案中查找关键字

SELECT * FROM questions q
INNER JOIN answers a
ON q.profile_id = a.profile_id
WHERE topic LIKE '%KEYWORD%'
OR description LIKE '%KEYWORD%';

获取在问题和答案表中使用关键字的用户的用户个人资料:

SELECT u.* FROM users u
INNER JOIN answers a
ON u.profile_id = a.profile_id
INNER JOIN questions q
ON q.profile_id = u.profile_id
WHERE topic LIKE '%KEYWORD%'
OR description LIKE '%KEYWORD%';

希望这有帮助。

编辑:格式化。