Mysql 合并这两个查询

Mysql 合并这两个查询,mysql,sql,merge,Mysql,Sql,Merge,我曾将这两个查询单独列出,但现在我需要将结果放在同一个列表中 现在,我通过使用javascript按id对项目进行排序来“修复”它。但是从服务器上合并这些数据会很好,这样我就可以分页结果了 数据库模式 桌友: 桌子帮助 查询A(返回当前用户的结果) 查询B(返回当前用户朋友的结果) 有没有办法合并这些查询?我真的不知道该怎么做 -编辑- 考虑到工会,但我不知道如何处理订单 $sql = '(SELECT * FROM helps WHERE id_user = '.$value.')

我曾将这两个查询单独列出,但现在我需要将结果放在同一个列表中

现在,我通过使用javascript按id对项目进行排序来“修复”它。但是从服务器上合并这些数据会很好,这样我就可以分页结果了

数据库模式

桌友:

桌子帮助

查询A(返回当前用户的结果)

查询B(返回当前用户朋友的结果)

有没有办法合并这些查询?我真的不知道该怎么做

-编辑-

考虑到工会,但我不知道如何处理订单

$sql = '(SELECT * FROM helps WHERE id_user = '.$value.')
                    UNION
                    (SELECT
                                h.*,
                                f.* 
                            FROM (
                                SELECT
                                    id  AS friendsId,
                                    CASE followerid WHEN '.$value.' THEN followingid ELSE followerid END AS friend_id
                                FROM friends
                                WHERE acepted = 1
                                AND (followerid  = '.$value.' OR followingid = '.$value.')
                            ) AS f
                                INNER JOIN helps AS h ON h.id_user = f.friend_id
                                ORDER BY h.id DESC)';

正如您在第二个查询中看到的,helps表已重命名为h。我怎样才能在第一时间做同样的事情?(两个查询以相同的格式返回数据)

如果两个查询的结果集相似,请尝试使用
UNION
运算符来合并这两个查询的结果和需要与
GROUP BY
一起使用的订单记录。请尝试以下查询:

SELECT h.id AS id, h.title, h.content, id_user, h.id_group,
       h.id_type, h.id_lic, h.avatar, h.attached, h.attached,
       h.fetcha, h.likes, h.lan, h.needsCount, h.receivedCount,
       MAX(h.fid) AS fid, MAX(h.friend_id) AS friend_id
FROM (   
      SELECT h.id AS id, h.title, h.content, id_user, h.id_group,
             h.id_type, h.id_lic, h.avatar, h.attached, h.attached,
             h.fetcha, h.likes, h.lan, h.needsCount, h.receivedCount,
             0 AS fid, 0 AS friend_id
      FROM helps h
      WHERE h.id_user ='.$value.'

      UNION ALL

      SELECT h.id, h.title, h.content, id_user, h.id_group,
             h.id_type, h.id_lic, h.avatar, h.attached, h.attached,
             h.fetcha, h.likes, h.lan, h.needsCount, h.receivedCount,
             f.id AS fid, f.friend_id
      FROM (
             SELECT id  AS friendsId,
                    CASE followerid WHEN '.$value.' THEN followingid
                                    ELSE followerid
                    END AS friend_id
             FROM friends
             WHERE acepted = 1
                   AND (followerid  = '.$value.' OR followingid = '.$value.')
            ) AS f
            INNER JOIN helps AS h
                ON h.id_user = f.friend_id
     ) h
GROUP BY h.id
ORDER BY h.id DESC;

按照Omesh所述进行联合,然后要处理订购,请执行以下操作:

SELECT * FROM
(
    ....Omesh's code....
) T
ORDER BY T.id DESC

联合的基本规则是

  • 每个查询返回的列数必须相等且相等
  • 数据类型必须相互匹配
如您所见,我没有修改您制定的查询。只是我为每个查询添加了一个虚拟列。此列将用于对所有记录进行排序。查询被另一个
select statt
包装,因此虚拟列不会显示在结果列表上,但它将作为排序记录的基础。下面的查询结果包含最上面的用户记录(因为
OrderBy OrderBy ASC
),后面是按朋友ID排序的用户朋友记录。如果需要任何澄清,请通知我。还有一件事,我在您的第二个查询中删除了
f.*
,因为它不是必需的,并且可能由于列(数字)不匹配而导致语法错误

SELECT  ID, Title, Content, ID_User, ID_Group, 
        ID_Type, ID_Loc, Avatar, Attached, Fecha, Likes, 
        Lan, NeedsCount, RecivedCount
FROM
    (
        SELECT *, 1 as OrderBy           -- first query you formulated
        FROM helps 
        WHERE id_user = '.$value.'
        UNION
        SELECT  h.*, 2 as OrderBy        -- second query you formulated
        FROM    (
                    SELECT  id  AS friendsId,
                            CASE followerid 
                                WHEN '.$value.' THEN followingid 
                                ELSE followerid 
                            END AS friend_id
                    FROM    friends
                    WHERE   acepted = 1 AND 
                            (followerid  = '.$value.' OR followingid = '.$value.')
                ) AS f
                    INNER JOIN helps AS h 
                        ON h.id_user = f.friend_id
    ) x
ORDER BY OrderBy ASC, ID DESC

如果可以包含表的架构,请在此上下文中定义“merge”更好。也许有比使用
UNION
@tonimichelca更好的方法,请尝试下面的答案。如果所选列不同,则该方法无效。关于语法,请看我可以,但我需要将帮助重命名为第一个表中的h,你能帮忙吗?谢谢谢谢我将测试并让您知道“字段列表”中的未知列“h”和“字段列表”中的未知列“f.id”相同的问题。。。“字段列表”中的未知列“h”您好,但我不想重命名字段,相同的函数将读取结果…@ToniMichelCaubet实际上查询中没有重命名的字段:DYou的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解第3行“”附近要使用的正确语法非常难说…重命名为fields real name并工作!从Yes中选择id、标题、内容、id\u用户、id\u组、id\u类型、id\u loc、头像、附件、fecha、likes、lan、needsCount、ReceivedCount!这就是我在第一次评论中所说的。重命名字段。谢谢
SELECT * FROM
(
    ....Omesh's code....
) T
ORDER BY T.id DESC
SELECT  ID, Title, Content, ID_User, ID_Group, 
        ID_Type, ID_Loc, Avatar, Attached, Fecha, Likes, 
        Lan, NeedsCount, RecivedCount
FROM
    (
        SELECT *, 1 as OrderBy           -- first query you formulated
        FROM helps 
        WHERE id_user = '.$value.'
        UNION
        SELECT  h.*, 2 as OrderBy        -- second query you formulated
        FROM    (
                    SELECT  id  AS friendsId,
                            CASE followerid 
                                WHEN '.$value.' THEN followingid 
                                ELSE followerid 
                            END AS friend_id
                    FROM    friends
                    WHERE   acepted = 1 AND 
                            (followerid  = '.$value.' OR followingid = '.$value.')
                ) AS f
                    INNER JOIN helps AS h 
                        ON h.id_user = f.friend_id
    ) x
ORDER BY OrderBy ASC, ID DESC