0

ID、ユーザー、テキスト、日付の4つの列を持つテーブルがあります。

「ユーザー」に多くのユーザーIDの1つが含まれている行を取得しようとしています。1 つから無限のユーザー ID が存在する可能性があります。

ユーザーIDの例

"4, 5, 23"

「ユーザー」列の例

"4, 12, 44"

基本的には、Facebook や Twitter のように、ユーザーの友達だけがステータスの更新を見ることができるステータス更新システムを作ろうとしています。

4

2 に答える 2

5

複数のユーザー ID を格納するための列を持つべきではありません。テーブルを作って参照すれば、ルックアップは簡単です。

于 2013-04-10T15:09:34.873 に答える
1

私があなたの問題を正しく理解していれば、これを複数の表に分割してください。

ID、ユーザー ID、テキスト、および日付を含むステータス テーブル。

ID、ユーザー名など (あなた次第) を持つユーザー テーブル。

ID、ユーザー ID、フレンド ID を持つフレンドシップ テーブル。(友情のための 2 つのエントリ、friend1 と friend2 を行うこともできますが、それはクエリごとに両方のフィールドを双方向でチェックすることを意味します)。

最後の表は、友情が双方向である必要性に基づいています! つまり、Twitter とは対照的に、Facebook の慣習はフォローしますが、おそらくフォローバックはありません。

次に、(ログインしたユーザーとして) 友達関係にあるユーザーからの更新を表示します。

SELECT s.text, s.date, u.username, s.userid FROM status s INNER JOIN ユーザー名 u ON s.userid = u.id INNER JOIN 友情 f ON f.friendid = s.userid WHERE f.userid = 'LOGGED IN USER ID' ORDER BY s.date DESC LIMIT 10

LOGGED IN USER ID を、現在ログインしているユーザーのユーザー ID に変更します。これは通常、セッション変数を使用して設定されます。

LIMIT 10最新の 10 件のステータス更新が表示されます。

次に、テキストと日付、およびユーザー名とユーザー ID をプロフィールにリンクして表示します (該当する場合)。

于 2013-04-10T15:31:28.263 に答える