繁体   English   中英

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

[英]Select from multiple tables where conditions must be met

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

考虑两个表(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());

因此,您知道,这不是很容易解释。 我想我想知道的是,是否有一种方法可以优化此代码,比方说,使用一个查询?

是的,你可以使用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

尝试:

$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在选择部分中包含A.course_id

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

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

您可以使用内部联接将其作为单个查询。 据我所知,您正在尝试基于user_id获取project_iduser_id为1。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM