我想知道我是否可以更好地组织/优化我的代码,因此我一直在阅读有关联接的更多信息,以及如何从单个查询中某个列匹配的两个不同表中查询/选择。但是,我找不到任何关于我想做什么的文件。
考虑两个表格(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());
所以,你知道,这不是很容易解释。我想我想知道的是,有没有办法优化这段代码,比如使用一个查询?
答案 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_id
,user_id
为1。
表A和B之间存在外键关系。因此,您可以将查询写为 -
Select project_id from A, B where A.course_id = B.course_id and user_id = 1;