我是真正的初学者到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
你应该考虑这个话题可能没有答复的事实。 –