2012-01-06 14 views
0

私は2つのテーブル(FriendsとNews_Feed)を持っています。私はNews_Feedテーブルから最新の行(最も高いid)を取得する必要があります。キャッチは、Friendsテーブルの2つのカラムのどちらかに関連するNews_Feedテーブルの行だけを選択したいということです。また、News_Feed.idで注文する必要があるので、2つのクエリを作成する(最初に友人を選択し、News_Feedクエリにループするなど)は機能しません。次のようにテーブルが設定されている:Mysqlは、別の行に基づいて1つのテーブルの異なる行を選択します

-Friends-
ID
ユーザ

News_Feedをuser_friending
ID
pertaining_user
作用
orig_comment

で、クエリをunworking、私の現在の...

$result = mysql_query("SELECT * FROM News_Feed WHERE pertaining_user=(SELECT user FROM Friends WHERE user_friending='37' AND is_confirmed='1' UNION SELECT user_friending FROM Friends WHERE user='37' AND is_confirmed='1') AND orig_comment='0' ORDER BY id DESC")or die(mysql_error()); 
while($row_news = mysql_fetch_array($result)){ 

これは私が理解して1つの行エラー、よりサブクエリ戻っ多くを返します。しかし、これを行う方法がある必要があります。

+0

友人テーブルには3つの列がありますか? –

+0

はい。 1つしかない3つの列。テーブルは単純にそこにユーザーの友情の関係を示すためです – dminicrick1

+0

@ dminicrick1 - それから 'is_confirmed'はどこから来ますか? – Eric

答えて

0

使用exists

select 
    * 
from 
    News_Feed f 
where 
    exists (
     select 
      1 
     from 
      friends u 
     where 
      (u.user = f.pertaining_user and u.user_friending = '37') 
      or (u.user_friending = f.pertaining_user and u.user = '37') 
      and u.is_confirmed = 1 
    ) 
order by 
    f.id desc 

これはunioninをやろうとしているよりもはるかに高速になります。半結合を行い、無効な行をすぐにスローします。

+0

Eric、私はあなたの質問を試みたが、それを働かせることはできない。 1人のユーザー(37)を選択してそれに基づいて表示しているだけです。私は実際に逆を探していました。 Konerakのソリューションは素晴らしいですが、効率的ではありません。彼の仕事として自分のものを適応させる方法に関するアイディアはありますか? – dminicrick1

+0

私はあなたのために私を編集しました - 最初は 'pertaining_user'の' 37'を得ていました。今度は、 'user'または' user_friending'が '37'に等しい' friends'行を探し、 'pertaining_user'と一致する列があれば返します。 – Eric

+0

まだ正常に動作していません。 Friendテーブルからのユーザー37のすべての友人に関連するNews_Feedアイテムを取得する必要があるときに、ユーザー37に関するNews_Feedアイテムのみを取得しています(ヘア抜き)。 – dminicrick1

0

あなたはおそらくINキーワードを探しています。

SELECT * 
FROM News_Feed 
WHERE pertaining_user IN 
(
SELECT user 
FROM Friends 
WHERE user_friending='37' 
AND is_confirmed='1' 
UNION 
SELECT user_friending 
FROM Friends 
WHERE user='37' 
AND is_confirmed='1') 
AND orig_comment='0' 
ORDER BY id DESC 
関連する問題