2014-09-01 21 views
0

我已经写了社交流的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 

现在上面的问题是,当用户不遵循任何人(即遵循表中没有针对特定用户的任何行),它不会显示用户自己因为在随后的表中没有行,所以两个表都不加入,所以在家乡流中发布。

我无法配置我怎样才能改变这种查询我只用跟着表的corredentials 4-5的地方,我不能使用IN与子查询,因为子查询会负担过重的服务器:)

任何帮助,请它将非常感激。

目前,它提供了这样的 数据如果用户遵循的一个或多个民族/页 比它显示用户自己跟着帐户的帖子。

** **,但如果用户不遵循任何其他帐户指的是新注册的用户比他/她共享任何职位不首页中显示的,因为后续的表不与其他两个表加入因为它没有会话用户的任何行。

编辑 上述SQL查询返回包含用户及其后续的唯一帖子的行。 我在PHP的帮助下在用户帐户的主页中显示这些帖子。 但我得到的问题是,当用户在新的或他/她不跟着别人比超过为什么用户自己的岗位也没有她/他的帐户的主出了后续的表不与数据表这就是加盟。有人帮助我解决我的SQL查询。 我发现只是其中的用户表,我将存储列命名为n_followings,并在获取与查询,我将使用PHP状况数据的时间,如果n_followings == 0比我会用这个SQL查询非SQL想法

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

仅供参考,'DISTINCT'不是一个函数,它并不需要这样的一个参数。这是一个适用于整个'SELECT'列表的关键字。 – Barmar 2014-09-01 14:57:06

+0

请提供您想要的数据和结果。几乎不可能弄清楚你究竟在问什么。 – Bulat 2014-09-01 14:58:22

+0

我再次编辑........................................ :) – 2014-09-19 15:53:29

回答

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 
+0

好的先生我将现在尝试它,并会告诉它产生的 – 2014-09-02 00:46:33

+0

我已经检查过它,它只显示最后18行的数据表。 再次我想告诉我,我想显示首页流(数据)多数民众赞成为什么情况是他们不只是加入表.................希望你会再次编辑你的答案谢谢你,我感谢你 – 2014-09-02 00:55:20

+0

我刚刚从原来的查询中复制了“LIMIT 18”,这就是为什么它只显示最后18行。 – Barmar 2014-09-02 17:05:33

相关问题