2011-03-27 75 views
2

我有兩個表格的問題和答案。從同一用戶的兩個表中獲取數據?

- questions{id,user_id,question,date} 
- answers {id,q_id,user_id,answer, date} 

我想用同樣的用戶檢索已輸入的問題和答案

i.e. select all answer and all questions for ID=39 order by date DESC 

而且以後我有一個查詢,我想同時通過獲取數組,並顯示數據,我如何區分它是一個問題還是答案,所以我可以正確顯示它們。

編輯:

SELECT 'Q' AS 
TYPE , q.question AS value, q.date 
FROM questions q 
WHERE q.user_id =39 
UNION ALL SELECT 'A' AS 
TYPE , q.question AS value, a.date 
FROM answers a,questions q 
WHERE a.q_id = q.id 
AND 
WHERE a.user_id =39 
ORDER BY `date` DESC 

我很抱歉,但即時通訊試圖讓已回答而不是答案本身的問題。我更新了SQL和頂部的數據庫設計,但我不斷收到一個錯誤

+0

你可以做兩個單獨的查詢來分離問題和答案。 – sikas 2011-03-27 16:29:23

+0

請發佈一個新問題,提供查詢和錯誤的詳細信息。 – 2011-03-27 17:14:21

+0

我已經檢查了我的個人資料:))抱歉! – pingpong 2011-03-27 17:15:24

回答

2

用途:

SELECT 'Q' AS type, 
     q.question AS value, 
     q.date 
    FROM QUESTION q 
    WHERE q.user_id = ? 
UNION ALL 
    SELECT 'A' AS type, 
     a.answer AS value, 
     a.date 
    FROM ANSWER a 
    WHERE a.user_id = ? 
ORDER BY `date` DESC 

UNIONUNION ALL用於合併查詢返回一個結果集。 UNION刪除重複;因此,UNION ALL不會刪除重複內容,並且比UNION更快。但是在UNION的語句中,所有SELECT語句的SELECT子句中都需要有相同數量的列。他們的數據類型必須在每個位置匹配。

爲了區分答案和問題值,示例定義了靜態值「A」代表答案,「Q」代表問題。您的應用程序層代碼可以根據需要對其進行處理以格式化數據。

+0

謝謝你的答案,但是當我使用php獲取數據時,我怎麼知道它的類型A或類型Q謝謝! – pingpong 2011-03-27 16:32:03

+0

@pingpong:通過檢查PHP中結果集的行的值。 – 2011-03-27 16:33:52

+0

感謝所以基本上這個單詞類型現在實際上是值,即'FetchArray ['type']':))+1從我,所以我檢查'FetchArray ['type']'是否等於A或Q – pingpong 2011-03-27 16:35:29

2
SELECT 'Q' as `type`, 
     id, 
     user_id, 
     question as quesion_or_answer, 
     `date` 
FROM questions 
WHERE user_id = 39 
UNION ALL 
SELECT 'A' as `type`, 
     id, 
     user_id, 
     answer as quesion_or_answer, 
     `date` 
FROM answers 
WHERE user_id = 39 
ORDER BY `date` DESC 
+1

+1:打我16秒 – 2011-03-27 16:42:17

-1

由於在問題和答案之間似乎沒有關係:使用單獨的查詢。

+1

不是我的倒退(我傾向於同意這個觀點)。然而,這不符合他們應該按照日期合併訂購的要求。 – 2011-03-27 16:35:17

0

我會偷懶,ALL使用UNION作爲,僅僅連接兩個表:

SELECT *, NULL as answer FROM questions WHERE ID=39 
UNION ALL 
SELECT *, NULL as question FROM answers WHERE ID=39 
ORDER BY date DESC 

爲後來differantiation的竅門是有一個空場,或一些其它標識符。

相關問題