ニュース フィードのテーブル データの元を特定する必要があります。フィードには、「ユーザーが動画をアップロードしました」または「ユーザーが自己紹介を更新しました」などの内容が含まれている必要があります。したがって、さまざまなタイプのデータがさまざまなテーブルにあるため、データがどこから来たのかを明らかにする必要があります。SQL でこれを実行できることを願っていますが、おそらくそうではないため、PHP を選択することをお勧めします。これを行う方法がわからないので、正しい方向を指すだけです。
図を作成する時間がないので、データベースについて簡単に説明します。
1.電子メール、パスワード、ID などのすべての基本情報を含むメンバーというタイトルのテーブルがあります。ID は主キーです。
他のすべてのテーブルには、メンバー テーブル内の ID にリンクする ID の外部キーがあります。
その他のテーブルには次のものがあります。トラック、ステータス、写真、ビデオ。そこからはすべて自明です。
更新されたデータがどのテーブルから来ているかをどうにかして特定する必要があるので、ユーザーに何をしたかを伝えることができます。できれば、フィード全体に対して 1 つの SQL ステートメントのみが必要なため、すべてのテーブルが結合され、タイムスタンプによって並べ替えられるため、すべてがはるかに簡単になります。できれば両方できるといいのですが、私が言ったように、本当によくわかりません。
ステートメントの基本的な概要は、長くなりますが簡略化されています。
SELECT N.article, N.ID, A.ID, A.name,a.url, N.timestamp
FROM news N
LEFT JOIN artists A ON N.ID = A.ID
WHERE N.ID = A.ID
ORDER BY N.timestamp DESC
LIMIT 10
メンバー テーブル;
CREATE TABLE `members` (
`ID` int(111) NOT NULL AUTO_INCREMENT,
`email` varchar(100) COLLATE latin1_general_ci NOT NULL,
`password` varchar(100) COLLATE latin1_general_ci NOT NULL,
`FNAME` varchar(100) COLLATE latin1_general_ci NOT NULL,
`SURNAME` varchar(100) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
Tracks テーブル、他のすべてのテーブルはほとんど同じです。
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=4 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
各テーブルに対してmysqlクエリを使用し、すべてを配列に入れてエコーアウトする前に。これは長くて面倒に思えたので、うまくいきませんでした。1週間ほど前だったので、そのコードをすべて削除しました。
これを深く掘り下げる必要があるとは思わないでください。私を正しい方向に向けるだけです。
添加:
これは、提案されたトリガーに対して作成したSQLクエリです。以前にトリガーを使用したことがないため、何が問題なのかわかりません。トラックに何かを挿入すると、このエラーが発生します
#1054 - Unknown column 'test' in 'field list'
クエリの値は、現時点ではテスト用です
delimiter $$
CREATE
TRIGGER tracks_event AFTER INSERT
ON tracks FOR EACH ROW
BEGIN
INSERT into events(ID, action)
VALUES (3, test);
END$$
delimiter ;
アップデート!
提案どおりにイベントと呼ばれるテーブルを作成し、トリガーを使用して、いくつかのテーブルの1つに挿入した後に更新しました。
これが私が試したクエリですが、間違っています。クエリは、イベント テーブルで参照されている情報を他のすべてのテーブルから取得し、タイムスタンプで並べ替える必要があります。
SELECT T.url, E.ID, T.ID, E.action, T.name, T.timestamp
FROM tracks T
LEFT JOIN events E ON T.ID = E.ID
WHERE T.ID = E.ID
ORDER BY T.timestamp DESC
そのクエリでは、問題がまだ残っているため、簡単にするためにイベントとトラックのテーブルのみを含めました。さらに多くのテーブルが存在するため、問題は悪化します。
問題を説明するのは難しいですが、基本的にすべてのテーブルに ID があり、1 つの ID で複数のアクションを実行できるため、アクションが誤った結果 (この場合は url) で表示される可能性があります。
イベント テーブルとトラック テーブルの内容を説明し、さらに説明するために結果を示します。
イベント テーブル。
4 has uploaded a track.
3 has some news.
4 has become an NBS artist.
トラックで。
2 uploads/abc.wav Cannonballs & Stones 2012-08-20 23:59:59 1
3 uploads/19c9aa51c821952c81be46ca9b2e9056.mp3 test 2012-08-31 23:59:59 2
4 uploads/2b412dd197d464fedcecb1e244e18faf.mp3 testing 2012-08-31 00:32:56 3
4 111 111111 0000-00-00 00:00:00 111111
クエリの結果。
uploads/19c9aa51c821952c81be46ca9b2e9056.mp3 3 3 has some news. test 2012-08-31 23:59:59
uploads/2b412dd197d464fedcecb1e244e18faf.mp3 4 4 has uploaded a track. testing 2012-08-31 00:32:56
uploads/2b412dd197d464fedcecb1e244e18faf.mp3 4 4 has become an NBS artist. testing 2012-08-31 00:32:56
111 4 4 has become an NBS artist. 111111 0000-00-00 00:00:00
111 4 4 has uploaded a track. 111111 0000-00-00 00:00:00
ご覧のとおり、クエリは望ましくない結果をもたらします。各 ID のアクションは各 URL で指定されるため、URL が複数回表示され、間違ったアクションで表示される可能性があります。そのクエリにはトラック テーブルしかないため、表示したい唯一のアクションは「トラックをアップロードしました」です。