我正在尝试创建新闻提要,并且从以前的问题中找到了执行它的最简单方法,但不知道我应该在 SQL 中进行哪种查询。
我有一个标题为艺术家的表格,其中包含成员 ID、艺术家姓名和他们页面的 url,都需要检索。如果 ID 不在此表中,则不应将其包含在语句的输出中。
我有几个具有相似结构的表,例如曲目、状态和新闻。还有更多,但对于这个问题,我们将坚持这三个,我可以稍后添加更多。在这些表中是 ID 以及其他内容,我将在稍后提供这些内容。
第三个表是一个标题为事件。在将数据添加到我引用的任何其他表之后,数据通过触发器插入到此处。此表包含 ID、操作(例如“已上传曲目。”)和时间戳。
艺术家表;
CREATE TABLE `artists` (
`ID` int(11) NOT NULL,
`name` varchar(100) COLLATE latin1_general_ci NOT NULL,
`url` varchar(100) COLLATE latin1_general_ci NOT NULL,
`DP` varchar(200) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `url` (`url`),
UNIQUE KEY `DP` (`DP`),
KEY `ID` (`ID`),
CONSTRAINT `artists_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `members` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
曲目
CREATE TABLE `tracks` (
`ID` int(11) NOT NULL,
`url` varchar(200) COLLATE latin1_general_ci NOT NULL,
`name` varchar(100) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`track_ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`track_ID`),
UNIQUE KEY `url` (`url`),
UNIQUE KEY `track_ID` (`track_ID`),
KEY `ID` (`ID`),
CONSTRAINT `tracks_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `members` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=111112 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
消息
CREATE TABLE `news` (
`ID` int(11) NOT NULL,
`article` text COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
KEY `ID` (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
地位
CREATE TABLE `status` (
`ID` int(11) NOT NULL,
`status` varchar(300) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
KEY `ID` (`ID`),
CONSTRAINT `status_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `artists` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
活动
CREATE TABLE `events` (
`ID` int(11) NOT NULL,
`action` varchar(100) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
KEY `ID` (`ID`),
CONSTRAINT `events_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `members` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='This table shows what the artist has done and is used feed'
我尝试过的查询失败了。这仅引用曲目和事件表。我不确定如何将其他表添加到查询中。
SELECT
T.url,
T.ID,
E.action,
E.ID,
E.timestamp
FROM tracks T
JOIN events E ON T.ID = E.ID
WHERE T.ID = E.ID AND E.action = 'has uploaded a track.'
ORDER BY E.timestamp DESC
为了回答非常有效的评论,查询位于新闻提要的 AJAX 请求页面中。输出将类似于以下内容;
一位艺术家上传了曲目。
跟踪在这里
格式化的时间戳在这里
另一位艺术家有一些消息。
新闻在这里
格式化的时间戳在这里
希望这会给你一个想法。
它末尾的所有数据都应按时间戳排序。提前致谢。