Mysql根据另一个表中的行选择不同的行
我有两个表(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)){
这将返回子查询返回多行的错误,我明白了。必须有办法做到这一点。
使用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
这将是比试图做一个in
与union
快得多。它做了一个半连接并立即抛出无效行。
埃里克,我试过你的查询,并不能得到它的工作。它只选择一个用户(37)并基于此显示。我实际上是在寻找相反的东西。 Konerak的解决方案效果很好,但效果并不尽如人意。关于如何适应你的工作和他一样工作的任何想法? – dminicrick1 2012-01-06 17:21:03
我为你编辑了我的文档 - 刚开始的时候它刚刚获得了'37的'''''''''''。现在,它可以找到任何'user'或'user_friending'等于'37'的'friends'行,如果其中任何一个列匹配'belongsing_user',则返回。 – Eric 2012-01-06 17:27:10
仍然无法正常工作。当它应该从Friends表中检索与所有用户37的朋友有关的News_Feed项目时,它仍然只检索与用户37有关的News_Feed项目。(拉出头发) – dminicrick1 2012-01-06 17:34:43
您可能正在寻找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
朋友表中有三列? – 2012-01-06 17:00:09
是的。一个只有三列。该表只是在那里显示用户的朋友关系店 – dminicrick1 2012-01-06 17:01:43
@ dminicrick1 - 那么'is_confirmed'从哪里来? – Eric 2012-01-06 17:04:22