从必须满足条件的多个表中进行选择

时间:2012-02-09 16:01:48

标签: php mysql optimization

我想知道我是否可以更好地组织/优化我的代码,因此我一直在阅读有关联接的更多信息,以及如何从单个查询中某个列匹配的两个不同表中查询/选择。但是,我找不到任何关于我想做什么的文件。

考虑两个表格(A,B)。


Table A
user_id -- + -- course_id
1       -- + -- 1

Table B
course_id -- + -- project_id
1         -- + --    2

我的查询类似于以下内容:

$sql_course= mysql_query("SELECT course_id FROM A WHERE user_id = 1") or die(mysql_error());

 while ($course_row = mysql_fetch_assoc($sql_course)) {

                            // Unique course ID
                            $courseID = $course_row['course_id'];

                            $sql_b= mysql_query("SELECT project_id FROM B WHERE course_id=$courseID") or die(mysql_error());

所以,你知道,这不是很容易解释。我想我想知道的是,有没有办法优化这段代码,比如使用一个查询?

4 个答案:

答案 0 :(得分:2)

是的,您可以使用SQL中的连接来实现此目的。

尝试这样的事情:

SELECT project_id FROM B JOIN A on B.course_id=A.course_id WHERE user_id=1

有几种类型的连接,根据结果集,您需要使用不同的连接。

很好地检查了联接在这里做了什么: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

答案 1 :(得分:1)

尝试:

$sql_course = mysql_query("SELECT A.course_id, B.project_id FROM A INNER JOIN B ON B.course_id = A.course_id WHERE A.user_id = 1 ORDER BY A.course_id, B.project_id") or die(mysql_error());

如果您关心价值,则只需在选择部分中加入A.course_id

答案 2 :(得分:0)

SELECT b.project_id
FROM table_b b
JOIN table_a a ON a.course_id = b.course_id
WHERE a.user_id = 1

这实际上是否能真正满足您的需求取决于您对数据的处理方式,但希望它能为您提供一个起点。

答案 3 :(得分:0)

您可以使用内部联接将其作为单个查询。据我了解,您尝试根据project_id获取user_iduser_id为1。

表A和B之间存在外键关系。因此,您可以将查询写为 -

Select project_id from A, B where A.course_id = B.course_id and user_id = 1;