繁体   English   中英

SQL连接QUERY多个表和SELECT的

[英]SQL join QUERY multiple tables and SELECT's

我建立以下查询,

        SELECT
        posts.id,
        posts.useraid,
        posts.useradn,
        posts.title,
        posts.createdate,
        posts.forumid,
        posts.type,
        posts.totalreplys,
        users.photo AS creatorphoto
    FROM posts
    JOIN users ON(users.id = posts.useraid)
    WHERE posts.forumid IN(
        SELECT subscribe.forumid AS fsub
        FROM subscribe  
        WHERE subscribe.useraid = '$myid'
    ) AND
    posts.forumid IN(
        SELECT forums.id
        FROM forums
        WHERE forums.relatedto=fsub
    )
    AND posts.type='post' 
    ORDER BY posts.timee DESC LIMIT 20

没有这部分,代码可以完美地工作

AND
    posts.forumid IN(
        SELECT forums.id
        FROM forums
        WHERE forums.relatedto=fsub
    )

但是,我需要查询以从他订阅的所有论坛中选择所有帖子,包括子论坛帖子。

'fsub'在这里没有作用域,它在查询中实际上甚至不存在:

posts.forumid IN(
    SELECT forums.id
    FROM forums
    WHERE forums.relatedto=fsub
)

我相信您需要使用UNION。

为什么不使用子查询而不是只将subscribe和forums表添加到主要的FROM条件?

例如,

FROM posts
JOIN users ON(users.id = posts.useraid)
JOIN subscribe ON (posts.forumid = subscribe.forumid)
JOIN forums ON (forums.relatedto = posts.forumid)

尝试这个:

  SELECT
        posts.id,
        posts.useraid,
        posts.useradn,
        posts.title,
        posts.createdate,
        posts.forumid,
        posts.`type`,
        posts.totalreplys,
        users.photo AS creatorphoto
    FROM posts
    JOIN users 
    ON users.id = posts.useraid AND posts.`type`='post'
    JOIN subscribe
    ON subscribe.forumid = posts.forumid AND subscribe.useraid = '$myid'
    JOIN forums
    ON posts.forumid = forums.relatedto 
    ORDER BY posts.timee DESC LIMIT 20

这是您的答案,您需要先加入订阅和表单,然后再使用子查询进行搜索。

SELECT
    posts.id,
    posts.useraid,
    posts.useradn,
    posts.title,
    posts.createdate,
    posts.forumid,
    posts.type,
    posts.totalreplys,
    users.photo AS creatorphoto
FROM posts
JOIN users ON(users.id = posts.useraid)
WHERE posts.forumid IN(
    SELECT subscribe.forumid AS fsub
    FROM subscribe ,forums
    WHERE subscribe.useraid = '$myid'
    and forums.relatedto = subscribe.forumid
    and forums.id = subscribe.forumid     
) 
AND posts.type='post' 
ORDER BY posts.timee DESC LIMIT 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM