【问题标题】:Getting data from only one table on multiple table joins在多个表连接上仅从一个表中获取数据
【发布时间】: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


【解决方案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

【讨论】:

  • 我已经检查过了,它只显示了数据表的最后 18 行。我想再次告诉我,我想显示 Home Stream(DATA),这就是为什么他们不只是加入表格的原因......希望你能再次编辑你的回答谢谢你我很感激你
  • 我刚刚从您的原始查询中复制了LIMIT 18,这就是它只显示最后 18 行的原因。
  • 但它可以显示 18 行,但问题是它从所有用户显示它们 criteriz 不适用于数据表:)
  • 请更新您的问题。发布一些示例数据,以及您希望得到的结果。
  • 我已经编辑过:- 看到这个 目前它提供这样的数据如果用户关注了一个或多个人/页面,它显示用户自己的和关注的帐户的帖子。 **但是 ** 如果用户没有关注任何其他帐户,则意味着新注册的用户,而不是他/她分享任何未显示在主流中的帖子,因为关注表不与其他两个表连接,因为它没有会话用户没有任何行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多