ID、ユーザー、テキスト、日付の4つの列を持つテーブルがあります。
「ユーザー」に多くのユーザーIDの1つが含まれている行を取得しようとしています。1 つから無限のユーザー ID が存在する可能性があります。
ユーザーIDの例
"4, 5, 23"
「ユーザー」列の例
"4, 12, 44"
基本的には、Facebook や Twitter のように、ユーザーの友達だけがステータスの更新を見ることができるステータス更新システムを作ろうとしています。
複数のユーザー ID を格納するための列を持つべきではありません。テーブルを作って参照すれば、ルックアップは簡単です。
私があなたの問題を正しく理解していれば、これを複数の表に分割してください。
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 をプロフィールにリンクして表示します (該当する場合)。