2013-08-06 123 views
0

因此,我正在使用數據庫中的幾個表,並且想知道查詢它的最佳方法。MYSQL查詢 - 加入或循環查詢

這裏的設置:

EVENTS: 
int event_id 
varchar event_name 
date event_date 

ATTENDANCE: 
int attendance_id 
int event_id (foreign key for EVENTS) 
int user_id (foreign key for USERS) 
int status 

USERS: 
int user_id 
varchar first_name 
varchar last_name 
varchar email 

差不多就是我要做的事情,就是有一個我想要得到出席一個事件(ID#),然後查詢考勤表的所有記錄與該事件相匹配的記錄,然後查詢參與參考的所有用戶的用戶表作爲該事件的一部分。

首先想到的是首先查詢數據庫中所有出席條目並獲取數組,然後遍歷每條記錄以查詢用戶信息。然而這看起來效率很低,並且必須有更好的方式來加入或者類似的東西。我沒有太多的加入經驗,所以我想知道我能否得到一些幫助。

這是什麼,我本來想的僞代碼:

SELECT * FROM attendance WHERE event_id = eventID 
while (row exists): 
    SELECT FROM users WHERE user_id = attendanceUserID 
    get info export in xml...etc. 

我不認爲這是要做到這一點的最好辦法,所以這將是更好的方式來做到這一點?

+0

很好的學習機會加入;他們起初可能會感到害怕,但你很快就會變得自然。 [從這裏開始](http://www.w3schools.com/sql/sql_join_inner.asp) –

+0

所以你認爲連接是最好的方式去做這件事? – phouse512

+0

這就是加入。嘗試'選擇 e.event_name,e.event_date, u.first_name,u.last_name,u.email 從事件Ë INNER JOIN上座率ON a.event_id = e.event_id INNER JOIN用戶U ON u.user_id = a.user_id'我只是把它鍵入我的頭頂,這應該給你一個方向去看看 –

回答

0

問題是「連接還是循環?」技術答案是使用連接。你所描述的是連接意味着要做什麼,在條件上組合表。

「select ... from ...(select more)」並不是解決問題的方法。考慮這個想法真的是「這兩張桌子有什麼能夠以完全可靠和可識別的方式將他們連接起來?」上述評論中的註釋是現貨。

然而,作爲一個「老人」,問題是「所有問題都是時間,你和機器的問題,所以問問你自己:想象方法A比方法B的效率高100倍,但是,你已經知道如何去做方法B.差異是0.02毫秒與2毫秒(假設你有一個小的數據集和一個快速的機器)。如果你能在三分鐘內完成方法B的編碼,並繼續你的項目,那可能是好的。一個最後期限,因爲即使以不同的方式實施,所有事情都可以通過一個可行的例子來簡化,它給了你一些東西來測試你剛學習的新方法。在他們甚至知道這件事是否重要之前,他們會追求效率。

讓事情工作第一,讓他們更快第二。 (當然,不要把自己描繪成一個可怕的設計角落,雖然沒有,但數據庫沒有問題,你只是想通過不同的方式獲取信息。)