从多个表连接上的一个表中获取数据

时间:2014-09-01 14:52:05

标签: php mysql sql database stream

我为社交网络流编写了一个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

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

我无法配置如何更改此查询我只使用follow table的corredentials 4-5个地方而且我不能将IN与子查询一起使用,因为子查询会使服务器负担过重:)

任何人都可以提供帮助非常感谢。

目前它提供了类似这样的数据 如果用户已关注一个或多个人/页面 而不是它显示用户自己和跟随帐户的帖子。

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

修改 Above SQL查询返回包含用户及其后续内容的唯一行的行。 我在PHP的帮助下在用户帐户的主页上显示这些帖子。 但我得到的问题是,当用户是新的或他/她不跟随某人而不是跟随表没有加入数据表,这就是为什么用户自己的帖子也没有显示在她/他的帐户的家中。有人帮我解决我的SQL查询。 我发现只有一个非SQL的想法,在用户表中,我将存储一个名为n_followings的列,并且在使用查询获取数据时,我将使用PHP条件,如果n_followings == 0,我将使用此SQL查询

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

1 个答案:

答案 0 :(得分:1)

使用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