ニュース フィードを作成しようとしていますが、以前の質問からそれを実行する最も簡単な方法を見つけましたが、SQL でどのようなクエリを作成すればよいかわかりません。
メンバーID、アーティスト名、ページへのURLを含むアーティストというタイトルのテーブルがあり、すべてを取得する必要があります。ID がこの表にない場合、ステートメントの出力に含めるべきではありません。
トラック、ステータス、ニュースなど、同様の構造を持つテーブルがいくつかあります。他にもありますが、この質問ではこれら 3 つに固執し、後ほどさらに追加できます。これらの表には特に ID が含まれており、これらは後で提供します。
3 番目のテーブルは、イベントというタイトルの 1 つです。私が参照した他のテーブルにデータが追加された後、トリガーを介してデータがここに挿入されます。このテーブルには、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 要求ページにあります。出力は次のようなものになります。
アーティストがトラックをアップロードしました。
ここにトラックが入ります ここに
フォーマットされたタイムスタンプ
別のアーティストのニュースがあります。
ここにニュースが入ります ここに
フォーマットされたタイムスタンプ
うまくいけば、それはあなたにアイデアを与えるでしょう。
末尾までのすべてのデータは、タイムスタンプ順に並べる必要があります。前もって感謝します。