草庐IT

mysql - 合并这两个查询

coder 2023-10-18 原文

我将这两个查询分开列出,但现在我需要将结果放在同一个列表中。

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

数据库架构

table 上的 friend :

表格有帮助

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

   $sql = 'SELECT * FROM helps WHERE id_user ='.$value;

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

$sql = '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';

有没有办法合并这些查询?老实说,我不知道该怎么做。

-编辑-

考虑联合,但我不知道如何按事物处理订单..

$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)';

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

最佳答案

要合并这两个查询和订单记录的结果,您需要使用 UNION ALL使用 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;

关于mysql - 合并这两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339182/

有关mysql - 合并这两个查询的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  3. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  8. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  9. ruby - 这两段代码有什么区别? - 2

    打印1:defsum(i)i=i+[2]end$x=[1]sum($x)print$x打印12:defsum(i)i.push(2)end$x=[1]sum($x)print$x后者是修改全局变量$x。为什么它在第二个例子中被修改而不是在第一个例子中?类Array的任何方法(不仅是push)都会发生这种情况吗? 最佳答案 变量范围在这里无关紧要。在第一段代码中,您仅使用赋值运算符=为变量i赋值,而在第二段代码中,您正在修改$x(也称为i)使用破坏性方法push。赋值从不修改任何对象。它只是提供一个名称来引用一个对象。方法要么是破坏性

  10. ruby - 具有两个参数的 block - 2

    我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋

随机推荐