我是真正的初學者到php-mysql,並試圖弄清楚這一點。結合到表格和按最新的最新日期排序
我有兩個表,如圖所示:主題表和對話表。
我試圖合併表來:
1)顯示屬於特定類別的標題(例如,如果category =顏色,顯示的標題:「橙色的顏色」和「顏色香蕉」)。
2)顯示上次評論的日期作了一個標題相關聯(,例如,最新的日期‘橙色的顏色’是2009年
3)排序依據的標題最新日期 - 降序
我可以管理做第一部分,但我失去了第2和第3部分。任何幫助表示讚賞。
我是真正的初學者到php-mysql,並試圖弄清楚這一點。結合到表格和按最新的最新日期排序
我有兩個表,如圖所示:主題表和對話表。
我試圖合併表來:
1)顯示屬於特定類別的標題(例如,如果category =顏色,顯示的標題:「橙色的顏色」和「顏色香蕉」)。
2)顯示上次評論的日期作了一個標題相關聯(,例如,最新的日期‘橙色的顏色’是2009年
3)排序依據的標題最新日期 - 降序
我可以管理做第一部分,但我失去了第2和第3部分。任何幫助表示讚賞。
所有你需要的是一個連接:
SELECT `topic`.`title`, `conversation`.`year`
FROM `conversation`
INNER JOIN `topic` on `topic`.`ID` = `conversation`.`topic_id`
您將使用SELECT CASE,JOIN和子查詢來實現這一目標。
讓我們從begining開始。因爲我不知道你的餐桌名字,我會寫一些假名字。你說你有兩個表格:一個表示主題,另一個表示回覆。你還提到了一些類別,但你沒有指定它是如何工作的,所以我會把它寫成主題表格的一列。
Table T = Topic's table
+ Table R = Reply's table
也可以考慮registry_date
TIMESTAMP列其中,我們保存行的註冊日期。
要實現由過去的變化您的訂單,你需要得到這樣一些信息:
您可以通過搜索最後一個答覆來回答這兩個問題。
SELECT R.topicID, R.registry_date FROM R GROUP BY R.topicID ORDER BY R.registry_date DESC
這將是你的子查詢。但是,如果您在ORDER BY查詢中需要它,則應將該結果與您的主題表加入。
SELECT T.title, T.category FROM T LEFT JOIN {subquery} AS Rs ON T.ID=Rs.topicID GROUP BY T.ID
這不是訂貨呢。請注意,我將子查詢結果稱爲「Rs」。 現在我們將使用我們的CASE。與我之前寫的不同,不是選擇SELECt CASE,我會嘗試ORDER BY CASE,好嗎?這很簡單。
首先讓我們掛載我們的CASE查詢。
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END
我們的第一個條件檢查是否有任何答案。如果它是空的,我們將使用該主題的註冊日期。如果它已填充,我們將使用回覆的註冊日期。現在,我們運用我們的訂單是,CASE BY查詢像這樣:
ORDER BY {CASE} DESC
正如你可能想要的最後修改日期的信息,我們將需要得到它在我們的選擇。你也可以在這裏使用你的CASE查詢。
SELECT T.title, T.category, {CASE} AS `last_change` (...)
然後我們的查詢結束這樣的:
SELECT
T.title,
T.category,
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END AS `last_change`
FROM T
LEFT JOIN (
SELECT
R.topicID,
R.registry_date
FROM R
GROUP BY R.topicID
ORDER BY R.registry_date DESC
) AS Rs ON Rs.topicID=T.ID
GROUP BY T.ID
ORDER BY
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END DESC
就像你問,例如,WHERE T.category='color'
SELECT
T.title,
T.category,
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END AS `last_change`
FROM T
LEFT JOIN (
SELECT
R.topicID,
R.registry_date
FROM R
GROUP BY R.topicID
ORDER BY R.registry_date DESC
) AS Rs ON Rs.topicID=T.ID
WHERE T.category='color'
GROUP BY T.ID
ORDER BY
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END DESC
請讓我知道如果有什麼地方丟失了。
如果有人有興趣,這段代碼似乎適用於我。
SELECT title, dateM FROM topic JOIN
(SELECT topic_id, MAX(date) as dateM FROM conversation GROUP BY topic_id
) AS c
ON c.topic_id=topic.id
WHERE category=color ORDER by dateM DESC
你應該考慮這個話題可能沒有答覆的事實。 –