-1

さて、私は自分のウェブサイトにニュースフィードを持ちたいと思っています。Users、Follow、および Posts という名前の 3 つのテーブルがあります。基本的なユーザー データは Users テーブルに格納され、誰が誰をフォローしているかは Follow テーブルに保存され、ユーザーの投稿はすべて Posts に格納されます。これで、データベース テーブルからすべての投稿を選択し、WHERE 句を使用して制限する方法がわかりました。しかし、フォローしているユーザーのみからすべての投稿を選択し、DESC 日付で表示するクエリをどのように記述すればよいでしょうか? ありがとう。

4

2 に答える 2

1

これが一般的なレイアウトです。あなたが言及したように3つのテーブルを作成します。例として以下に概説します

[テーブル]

  • ユーザー
  • フォロワー
  • 投稿

users テーブルには、少なくとも userid (自動増分値/主キー) のような列が必要です。

フォロワー テーブルには、users テーブルの userid に一致する userid のようなものが必要です。followid 列には、users テーブルのフォロワーの ID # も含まれます。

次に、投稿テーブルにはユーザーIDも必要なので、各投稿が作成されると、ユーザーテーブルのIDが取得されます。

次に、次のようなことをする必要があります。

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

これを理解するには、ユーザーIDをどのように取得しているかに大きく依存します。Facebook などのログイン後にセッションを使用してユーザー ID を渡す場合、userid = ### を userid = ".$_SESSION['userid']." のように変更できます。しかし、これもユーザー ID をどのように渡すかによって大きく異なりますが、上記は少なくともある程度は開始できるはずです。

テーブルが大きくなったときにすばやく結合できるように、userid、followid 列にインデックスを配置してください。

于 2012-04-25T18:41:42.847 に答える
0

@Shaneの答えに代わるものは、JOIN演算子を使用することです:

'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 ($selectedUserID) について、フォローしているユーザーのすべてのユーザー ID を検索し (フォロー ID をフォロー x-ref テーブルのユーザー ID に一致させます)、投稿テーブルからそれぞれの投稿を降順で検索します。日にち。誰もフォローしていない場合、またはフォローしているユーザーに投稿がない場合は空になります。

また、データベースへの入力をサニタイズし、出力を Web にエスケープすることを思い出させる必要がないことを願っています。

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

于 2012-04-25T19:06:43.557 に答える