繁体   English   中英

MySQL根据另一个表的行选择一个表中的不同行

[英]Mysql select distinct rows in one table based on rows of another

我有两个表(Friends和News_Feed)。 我需要从News_Feed表中检索最新的行(最高ID)。 问题在于,我只想选择News_Feed表中与Friends表中两列之一相关的行。 我还需要按News_Feed.id进行排序,因此无法创建两个查询(例如先选择我的朋友,然后循环到News_Feed查询)。 表设置如下:

-朋友-
ID
用户
user_friending

新闻_Feed
ID
有关_用户
行动
orig_comment

我目前无法正常使用的查询是...

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

这将返回子查询返回多个行错误,据我了解。 一定有办法做到这一点。

您可能正在寻找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

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 它执行半联接并立即抛出无效行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM