[英]MySQL project design - conditionally select from one table based on rows from another select query
[英]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.