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