【发布时间】:2014-10-25 20:04:22
【问题描述】:
我为社交网络流编写了一个 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 与子查询一起使用,因为子查询会使服务器负担过重:)
请大家帮忙,不胜感激。
目前它提供这样的数据 如果用户关注了一个或多个人/页面 比它显示用户自己和关注的帐户的帖子。
**但是 ** 如果用户没有关注任何其他帐户,则表示新注册用户,而不是他/她分享任何未显示在主页流中的帖子,因为关注表不与其他两个表连接,因为它没有任何会话用户的行。
编辑
上面的 SQL 查询返回包含用户及其关注者的唯一帖子的行。
我在 PHP 的帮助下将这些帖子显示在用户帐户的主页中。
但是我遇到的问题是,当用户是新用户或他/她没有关注某人时,比关注表不加入数据表,这就是为什么用户自己的帖子也没有显示在她/他的帐户主页中。有人帮我解决我的 SQL 查询。
我发现了一个非 SQL 的想法,在用户表中我将存储一个名为 n_followings 的列,并且在使用查询获取数据时,我将使用 PHP 条件,如果 n_followings==0,我将使用这个 sql 查询
SELECT <columns> FROM data where timeline_id='$;id' or upld_id='$id'
【问题讨论】:
-
仅供参考,
DISTINCT不是函数,它不接受这样的参数。这是一个适用于整个SELECT列表的关键字。 -
请提供您想要获得的数据和结果。几乎不可能弄清楚你到底在问什么。
-
我再次编辑...................................... . :)
标签: php mysql sql database stream