Sql选择内部joine和union 3表

时间:2016-07-09 17:26:47

标签: php mysql sql-server join union

我一直在尝试联合三个并且加入一个表,我成功地选择仅使用内部联接并且还结合内部联接和联合我的问题是获得回复ID我已经尝试了很多东西来显示回复ID但是在其他工作正常的情况下继续犯错误

Bellow sql给我这个

     //$dsnnot->prepare("SELECT * FROM replys r INNER JOIN blog_post b ON r.rid = b.BID WHERE b.UserName = :ownerna AND r.read = 1");        

        $dsnnot->prepare('SELECT * FROM (
            SELECT "post" AS type, BID AS eid, blog_title AS title, Time AS stime, blog_body AS description, UserName AS owner FROM blog_post b 
INNER JOIN replys r ON r.rid = b.BID WHERE b.action = "active" AND r.read = 1
            UNION 
            SELECT "jaile" AS , jid AS eid, orgname AS title, jaildate AS stime, OrgDescription AS description, jailorgnowner AS owner FROM jailorgname
            UNION
            SELECT "articl" AS type, TID AS eid, Atitle AS title, Atime AS stime, Abody AS description, Auser AS owner FROM articlespost

        ) foo  WHERE owner = :ownerna');

我能够通过

输出
  

type>显示它来自哪里

     

eid>显示主要帖子ID

     

标题>显示帖子标题

     

所有者>显示帖子作者

     

stime>显示时间

     

描述>显示帖子内容

现在我的问题是显示replys> RID,我也希望把它放在我的php

1 个答案:

答案 0 :(得分:1)

您必须具有相同数量的列,并且每个SELECT中的列必须具有相同顺序的相同数据类型。因此,如果您想要回复ID,则必须为您未选择的每个选择添加空值。

$dsnnot->prepare('
SELECT *
FROM (
  SELECT
    "post" AS type,
    BID AS eid,
    blog_title AS title,
    Time AS stime,
    blog_body AS description,
    UserName AS owner,
    r.replyID
  FROM blog_post b
  INNER JOIN replys r ON r.rid = b.BID
  WHERE b.action = "active" AND r.read = 1

  UNION

  SELECT
    "jaile" AS type,
    jid AS eid,
    orgname AS title,
    jaildate AS stime,
    OrgDescription AS description,
    jailorgnowner AS owner,
    null AS replyID
  FROM jailorgname

  UNION

  SELECT
    "articl" AS type,
    TID AS eid,
    Atitle AS title,
    Atime AS stime,
    Abody AS description,
    Auser AS owner,
    null AS replyID
  FROM articlespost
) foo
WHERE owner = :ownerna');