2013-07-21 88 views
0

假設我有兩個表格,一個是用戶喜歡的電影條目,另一個是用戶已經走過的事件。每個表都有一個用於瞭解用戶的列。類似:有沒有比使用2 SELECT更好的方法?

表films:

id | iduser | film | number of watches | note .... 

表事件:

id | iduser | event | date | .... 

兩個ID用戶所用的關係的表與用戶的其它信息連接。

如果我想從table電影中選擇一些列,並從具有相同iduser的表事件中選擇其他列,是否有比2 SELECT更好的方法?我這樣說是因爲每一個選擇都有行diferent號碼,以便UNION給我一個錯誤,並加入給了我這樣的:

編輯

FILM | NOTE |  EVENT  | DATE 
----------------------------------------- 
tlor | 9 | going to park | 20/7/12 
tlor | 9 | eat a sandwich | 5/9/10 
B film | 7 | going to park | 20/7/12 
B film | 7 | eat a sandwich | 5/9/10 

EDIT 2

我說只有一個選擇因爲我認爲速度更快,但如果速度更快,請讓我知道。

+0

你能否提供一個你想要的輸出樣本,我不明白爲什麼你不希望'加入'如果從2個相關表中提取數據。 –

+0

使用內部連接爲每個用戶獲取所有必填字段作爲一條記錄,並讓應用程序處理其餘部分。 –

+0

我認爲'SELECT * .Films,* .events FROM Films,WHERE iduser ='WHERE events will have – vladkras

回答

1

如果您由於某種原因需要精確地使用,以獲取你的數據的一個選擇,你可以統一的結果集爲UNION ALL這樣

SELECT 'film' type, iduser, film name, watches, note, NULL date 
    FROM films 
WHERE iduser = ? 
UNION ALL 
SELECT 'event' type, iduser, event name, NULL, NULL, date 
    FROM events 
WHERE iduser = ? 

另一種方法搶在一氣呵成的所有數據是打包特定的列值到特定表GROUP_CONCATdetails列,然後explode它在客戶端代碼

SELECT 'film' type, iduser, film name, GROUP_CONCAT(CONCAT_WS('|', watches, note)) details 
    FROM films 
WHERE iduser = 1 
GROUP BY iduser, film 
UNION ALL 
SELECT 'event' type, iduser, event name, GROUP_CONCAT(CONCAT_WS('|', date)) 
    FROM events 
WHERE iduser = 1 
GROUP BY iduser, event 

這裏是SQLFiddle演示

+0

你認爲在一個大型數據庫上更快? –

+0

好的重點是你的。 2 SELECT = 2.01 s。 SELECT UNION = 1.03 –

2

做兩個SELECT是這裏的正確解決方案。您正在加載兩組不同的數據。

IF兩個表有類似的模式(例如,相同的列名和類型),你可以將二者結合起來使用:

SELECT * FROM table1 WHERE userid = ? UNION SELECT * FROM table2 WHERE userid = ? 

然而,這不會有兩個表理智地工作不同的模式。

0

除了其他人提到的UNION之外,您可以使用多個LEFT JOINS來做到這一點。

喜歡的東西

SELECT U.UID, F.FIELD1, E.FIELD1 
    FROM USERS U 
    LEFT JOIN EVENTS E ON U.USERID=E.USERID 
    LEFT JOIN FILMS F ON U.USERID=F.USERID 
    WHERE F.USERID IS NOT NULL OR F.USERID IS NOT NULL 

類似的東西可以工作,根據您的需要。這樣,如果該行是EVENT行,它將爲您的事件提供字段,並且如果它是電影記錄,則電影字段將被填充。

+0

你的解決方案給了我和我一樣的結果 –

相關問題