2012-01-06 166 views
0

我有兩個表(Friends和News_Feed)。我需要從News_Feed表中檢索最近的行(最高ID)。問題在於,我只想在News_Feed表中選擇與Friends表中兩列中任一列相關的行。我還需要通過News_Feed.id進行排序,因此創建兩個查詢(例如首先選擇我的朋友,然後循環到News_Feed查詢中)將不起作用。表設置如下:Mysql根據另一個表中的行選擇不同的行

-Friends-
ID
用戶
user_friending

News_Feed
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)){ 

這將返回子查詢返回多行的錯誤,我明白了。必須有辦法做到這一點。

+0

朋友表中有三列? – 2012-01-06 17:00:09

+0

是的。一個只有三列。該表只是在那裏顯示用戶的朋友關係店 – dminicrick1 2012-01-06 17:01:43

+0

@ dminicrick1 - 那麼'is_confirmed'從哪裏來? – Eric 2012-01-06 17:04:22

回答

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 

這將是比試圖做一個inunion快得多。它做了一個半連接並立即拋出無效行。

+0

埃裏克,我試過你的查詢,並不能得到它的工作。它只選擇一個用戶(37)並基於此顯示。我實際上是在尋找相反的東西。 Konerak的解決方案效果很好,但效果並不盡如人意。關於如何適應你的工作和他一樣工作的任何想法? – dminicrick1 2012-01-06 17:21:03

+0

我爲你編輯了我的文檔 - 剛開始的時候它剛剛獲得了'37的'''''''''''。現在,它可以找到任何'user'或'user_friending'等於'37'的'friends'行,如果其中任何一個列匹配'belongsing_user',則返回。 – Eric 2012-01-06 17:27:10

+0

仍然無法正常工作。當它應該從Friends表中檢索與所有用戶37的朋友有關的News_Feed項目時,它仍然只檢索與​​用戶37有關的News_Feed項目。(拉出頭髮) – dminicrick1 2012-01-06 17:34:43

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 
相關問題