簡體   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