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