2012-02-23 16 views
2

私はmysqlデータベースの2つのテーブルを持っているに参加する:のMySql:2つの単純なテーブル

table #1: follows 

    follower | following 
------------------------ 
    john  | dan 
------------------------ 
    peter  | john 
------------------------ 
    peter  | dan 
------------------------ 
    john  | peter 
------------------------ 
    dan  | peter 
------------------------ 

table #2: questions 

    text   | username 
---------------------------- 
    something  | peter 
---------------------------- 
    something1  | dan 
---------------------------- 
    something2  | peter 
---------------------------- 
    something3  | john 

のは、私は、ユーザー名「ダン」でサイトにログインしていますことを言ってみましょう。

私が従う人々が始めた最新の質問を見たいと思います。この場合、「ピーター」からの質問のみ。

「フォロー」テーブルには、誰かが記録したすべてのフォローが含まれ、「質問」テーブルにはすべての質問が含まれています。

私はMySqlの基本を知っていますが、MySql JOINについては何も知りません。 (< - 目標を達成するためにはJOINが必要だと思う)

私の質問:これをPHPスクリプトでどうやって行うことができますか?

事前に感謝しますが...

答えて

3
SELECT q.username, q.text 
    FROM follows f 
     INNER JOIN questions q 
      ON f.following = q.username 
    WHERE f.follower = 'dan' 
+0

Ahh ... thanks Joe!それは働いている! ;)私は質問をしたいと思います:それはどのように機能しますか?私はMySql JOINのかなり初心者ですので、後でスクリプトを変更したいのであれば、それをやる方法はわかりません!それで何が何であるか簡単に説明できますか?ありがとう... :) – Akos

1

むしろダウン、すべてのレコードをダンプして、PHPスクリプトの内部でそれをやってよりも、データベース上のレコードのフィルタリングを行うために、より効率的です。あなたのクエリは、のいずれかで行うことができ、JOIN:

SELECT q.* 
FROM questions q 
JOIN follows f ON f.following = q.username 
WHERE f.follower = 'dan' 

かによって、あなたの質問の範囲外(

SELECT q.* 
FROM questions q 
WHERE q.username IN (SELECT f.following 
         FROM follows f 
         WHERE f.follower = 'dan') 

サブクエリが、あなたがあなたのテーブルに一意のインデックスのいくつかのタイプを追加することもでき、あなたが特定の質問を削除したい場合や、あなたが従う人を取り除こうとしている場合は、独自のレコードを取得するためにフィールドの組み合わせを指定するのではなく、インデックス上で削除することができます)

0

- USING句の内部結合INNER SELECT * FROM ()は

USING bのJOIN - インナーのON B を内部結合からのON句 SELECT *との結合します。 = b。

このように試してください:)

関連する問題