在多个表联接中仅从一个表获取数据



我已经为社交网络流编写了一个MySQL查询。

这是:

SELECT distinct(d.id), d.directory, u.name, u.pic
FROM data as d, follow as f, users as u  
WHERE f.flwid = $id 
  AND f.status = 1 
  AND d.blocked = '0'
  AND (d.upld_id = $id OR d.timeline_id = $id OR d.upld_id = f.acid OR d.timeline_id = f.acid)
  AND (d.`with`<if(f.is_con=1,3,2) or d.`with`<if(d.upld_id=$id,4,2)) 
  AND u.id = d.upld_id 
ORDER BY 
    d.id DESC 
LIMIT 18

现在,上面的问题是,当用户不关注任何人时(即关注表中没有特定用户的任何行),它不会在主流中显示用户自己的帖子,因为两个表都没有加入,因为关注表中都没有行。

我无法配置如何更改此查询,我只使用下表的4-5个对应位置,并且我不能将IN与子查询一起使用,因为子查询会使服务器负担过重:)

请任何人帮忙,我们将不胜感激。

目前它提供的数据如下如果用户关注了一个或多个用户/页面然后它显示用户自己和关注帐户的帖子。

**但是**如果用户没有关注任何其他帐户,则意味着新注册的用户除了分享任何帖子之外,不会在主流中显示,因为关注表没有与其他两个表连接,因为它没有任何会话用户行。

编辑Above SQL查询返回包含用户及其追随者的唯一帖子的行。我在PHP的帮助下在用户帐户的主页中显示这些帖子。但我遇到的问题是,当用户是新用户或他/她不关注某人时,除了关注表不加入数据表之外,这就是为什么用户自己的帖子也不会显示在她/他的帐户中的原因。有人帮我解决SQL查询。我发现了一个非SQL的想法,其中在users表中,我将存储一个名为n_followings的列,在用查询获取数据时,我将使用PHP条件,如果n_follows==0,那么我将使用这个SQL查询

SELECT <columns> FROM data where timeline_id='$;id' or upld_id='$id' 

使用LEFT JOIN:

SELECT d.id, d.directory, u.name, u.pic
FROM data AS d
JOIN users AS u ON u.id = d.upld_id
LEFT JOIN follow AS f 
ON f.flwid = $id 
    AND f.status = 1 
    AND (d.upld_id = $id OR d.timeline_id = $id OR d.upld_id = f.acid OR d.timeline_id = f.acid)
WHERE d.`with` < IF(f.is_con = 1, 3, 2)
    OR d.`with` < IF(d.upld_id = $id, 4, 2)
ORDER BY d.id DESC
LIMIT 18

相关内容

  • 没有找到相关文章

最新更新