2012-04-25 13 views
-1

さて、私は自分のウェブサイトにニュースフィードを持ちたいと思っています。私は、ユーザー、フォロー、および投稿という3つのテーブルがあります。基本ユーザーデータは、フォローテーブルに格納されているフォローしているユーザーテーブルと、ユーザーの投稿が投稿に書き込まれたユーザーテーブルに移動します。今、私はデータベーステーブルからすべての投稿を選択し、WHERE句を使用してそれを制限する方法を知っています。しかし、どのようにして私のクエリを書いて、彼らが従っているユーザーだけからすべての投稿をすべて選択し、それをDESC日付で表示するのですか?ありがとう。ここでSQLクエリで配列を使用する

+0

この種の質問に対してスキーマを示す方がよいでしょう。また、どんなクエリを試しましたか?あなたは望みの結果に近づきましたか? –

+0

あなたが試したことは、あなたのために良い答えをピン止めするのに役立つかもしれません –

答えて

1

はあなたが言及した3つの表のように作り、あなたのための一般的なレイアウトですが、私は単なる一例として

[TABLES]

  • ユーザー
  • フォロワー
  • の記事の下に概説されてきました

usersテーブルには、少なくともuserid(自動インクリメント値/主キー)。

フォロワーテーブルには、ユーザーテーブルuseridと一致するuseridのようなものが必要です。ユーザーIDは、ユーザーテーブルのフォロワーのID#も持つフォローアップ列です。

あなたの投稿テーブルでは、各投稿が作成されたときにuseridのIDを持たせたいと思うでしょう。あなたがこれを理解するために、ユーザーIDを取得している方法についての

SELECT p.* 
FROM posts AS p 
WHERE p.userid IN (SELECT followid FROM followers WHERE userid = ###) 
ORDER BY p.date DESC 

が今では本当に依存します

次に、あなたのような何かをする必要があります。あなたがFacebookのようなものに似たログイン後にセッションを使ってユーザーidを渡すと、userid = ###をuserid = "。$ _ SESSION ['userid']のように変更することができます。しかし、もう一度それは本当にあなたがどのようにユーザーIDを渡すかに依存しますが、少なくとも上記はあなたをいくらか起動させるべきです。

テーブルが大きくなるとすぐに結合が行われるように、ユーザーID、followid列にインデックスを配置してください。

0

シェーンの答え@に代わるものは、結合演算子を使用することです:inputedユーザーID($ selectedUserID)については

'SELECT p.* // I prefer to name all the fields, but for brevity's sake I'll use the shorthand 
FROM Posts AS p 
INNER JOIN Follow AS f ON p.userid = f.followid 
WHERE f.userid = '.$selectedUserID.' 
ORDER BY p.date DESC;' 

を、それがために従うのIDに一致する(彼らは従う人々のすべてのユーザーIDを検索しますFollow x-refテーブルのユーザーID)、Postテーブルからそれぞれの投稿を日付順に検索します。誰にも従わないと空になるか、従う人には投稿がありません。

また、データベースへの入力をサニタイズし、出力をWebにエスケープするように伝える必要はありません。

これはあなたが探しているものですか?

関連する問題