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