2011-07-12 18 views
0

私のウェブサイトでは、ユーザが別のユーザから「更新」を得ることを選択できる機能をプログラムしようとしています。ユーザーが「更新を受け取る」をクリックすると、更新を受け取る他のユーザーとともに、そのユーザーIDがデータベースにスローされます。例(4,5,6,7,8)の場合。WHERE IN句を使用してMySQLクエリを使用する際の問題

members | updates 
----------------- 
    id | id 
updates | member_id 
     | content 
     | content_date 

私がデータベースにクエリを実行すると、私は更新テーブルからメンバー:更新の既に指定されたユーザーからの更新のみを取り出す必要があります。

$sql_updates = mysql_query("SELECT * 
           FROM updates a, 
            members b 
          WHERE a.member_id IN b.updates 
          ORDER BY a.content_date DESC 
          LIMIT 10"); 

while($row = mysql_fetch_array($sql_updates)) { 

これは最善の方法ですか?

+0

'b.updates'カラムは値をカンマ区切りのリストとして保存しますか? –

+0

@dystopia:@Kerrek SBの回答が最初であり、正しい – gbn

答えて

4

まず、列名を正しく入力してください - mem_idまたはmember_id、それはどうでしょうか?第二に、これは単なる内部が参加されています

SELECT members.id AS mem_id, updates, content, content_date 
FROM members JOIN updates ON(members.id = updates.member_id) 
ORDER BY content_date DESC 
LIMIT 10; 
+0

は、そこにmem_idを持つことを急いで入力したわけではありませんでした。ありがとう! – dystopia

0

MySQLでは、あなたがあなたの中に提訴された場合、プログラミング作業の「OR」のようなものである「の」b.updatesだけでなく、コラムの更新のアレイを提供する必要がありますまたは私は「メンバー」と「アップデート」TABLをリンクする第三のテーブル「サブスクリプション」を使用することをお勧めします他のまたはより良い方法は、JOIN

$sql_updates = mysql_query(" 
SELECT * FROM updates a JOIN members b ON (a.mem_id = b.updates) 
ORDER BY a.content_date DESC LIMIT 10"); 
+0

ありがとうございました!魅力のように働いた。 – dystopia

0

を使用することができ、アレイ

$sql_updates = mysql_query(" 
SELECT * FROM updates a, members b 
WHERE a.mem_id IN (SELECT updates from members) 
ORDER BY a.content_date DESC LIMIT 10"); 

を返すためにサブクエリを使用es。

サンプルテーブル構造:各サブスクリプションの

subscriptions 
------------- 
id 
member_id 
update_id 

は(「受信アップデート」をクリックします)、あなたは「サブスクリプション」テーブルの行を作成します。

0

joinは、inが意味をなさない場合に余分な結果を与えることがあります。通常、joinと同じように実行するが、inの動作を与えるため、exists演算子を推奨します。後で別のものを使用して自分自身を保存することができます。

$sql_updates = mysql_query("SELECT * 
           FROM updates a 
         where exists (select * from members b        
         WHERE a.member_id b.updates) 
          ORDER BY a.content_date DESC 
          LIMIT 10"); 
関連する問題