2012-06-06 33 views
0

這是我期待做的事情,但如果可能與否,我有疑問!結合mysql中的2個表

我有2個表,一個叫users,另一個是answers。我需要將結果合併爲一個陳述,並按time排序。棘手的部分是我在兩個表上都有time,我需要考慮兩個time字段來排序結果。

這是我的失敗嘗試拿出查詢:

SELECT * FROM (SELECT id, username, first_name, last_name, time FROM users 
UNION ALL 
    SELECT id, answer, pid, uid, time FROM answers) as AB 
ORDER BY `AB.time` 

UPDATE

我想出了下面的SQL查詢:

SELECT username AS user, '' as page , '' as content , time FROM users 
UNION ALL 
    SELECT (SELECT username FROM users WHERE `id`=`uid`) AS user, pid AS page, answer AS content, time FROM answers 
ORDER BY `time` DESC 

它是我正在尋找,但由於某種原因,第二個SELECT查詢中的user字段顯示爲null!任何想法爲什麼?

+0

提預期的後期產出並關閉一次。 –

+0

問題是這部分:「SELECT(選擇用戶名從用戶WHERE'ID' ='uid')」爲第二個SELECT命令,我想要一個字段從users表中使用'uid'從'answers'表中獲取用戶名 –

+0

'user'字段是'NULL',因爲單詞'user'是爲''保留的(SELECT用戶名FROM用戶WHERE'id'='uid')AS用戶'我猜。改爲例如用戶和檢查出來 – Joe

回答

2
SELECT id, username, first_name, last_name, time FROM users 
UNION ALL 
    SELECT id, answer, pid, uid, time FROM answers 
ORDER BY 'time` 

解決方案,爲每個表

SELECT id   AS t1_id, 
     username AS t1_username, 
     first_name AS t1_first_name, 
     last_name AS t1_last_name, 
     NULL  ast2_id, 
     NULL  AS t2_answer, 
     NULL  AS t2_pid, 
     NULL  AS t2_uid, 
     time 
FROM users 
UNION ALL 
SELECT NULL AS t1_id, 
     NULL AS t1_username, 
     NULL AS t1_first_name, 
     NULL AS t1_last_name, 
     id  ast2_id, 
     answer AS t2_answer, 
     pid AS t2_pid, 
     uid AS t2_uid, 
     time 
FROM answers 
ORDER BY time 
+0

謝謝你的工作,但我得到的結果都混在一起了,第二個SELECT語句的字段名稱與第一個SELECT字段名稱相同,反正有自定義結果的字段名稱?我也得到'[BLOB - 6B]'與'6B'在每個結果上都不相同,爲什麼? –

+0

檢查新的答案 –

+0

謝謝:) ...我自己想通了,你介意再看看這個問題,我再次更新它! –

1

有不同的列名,如果users.id和answers.uid都應該是一樣,那麼這應該工作:

SELECT u.*, a.* FROM users AS u 
    JOIN answers AS a ON a.uid = u.id 
    ORDER BY a.time