RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1525166
Accepted
Дима Й
Дима Й
Asked:2023-06-11 20:38:21 +0000 UTC2023-06-11 20:38:21 +0000 UTC 2023-06-11 20:38:21 +0000 UTC

从几个表中选择,按每个表的时间排序

  • 772

让我稍微简化一下表格。我有 6 张桌子。

  1. modemsInfo (id, idUser, idGroup, infoText) // 关于调制解调器的信息
  2. groupModems (id, idUser, nameGroup) // 有关可以包含调制解调器的组的信息
  3. data (idModem, Time, text) // 调制解调器发送的一般信息
  4. dataResponseConfig (idModem, Time, text) // 从调制解调器收到的配置信息
  5. dataResponseReset (idModem, Time, text) // 重置从调制解调器收到的结果
  6. queueSmsLog (idModem, Time, text) // SMS 发送到调制解调器

我需要从用户的调制解调器发出信息。我选择调制解调器并从表中粘贴最后的响应(在列 ( Time ) 中排序并设置限制 1):general ( data )、config ( dataResponseConfig )、reset ( dataResponseReset ) 和 smsLog ( queueSmsLog )。一切正常,直到任何表中都没有相同的时间值(Time)。有重复项。我正在使用这个查询。我觉得问题出在请求的最后,但是没有足够的知识来解决它。

SELECT gM.nameGroup as nameGroup, mI.infoText, qSL.Time, qSL.text,
       dRC.Time ,dRR.Time, data.Time, data.text
FROM groupModems gM
 left outer JOIN modemsInfo mI ON mI.idUser = gM.idUser AND mI.idGroup = gM.id
 left outer JOIN data ON mI.id = data.idModem
 left outer JOIN queueSmsLog qSL ON mI.id = qSL.idModem
 left outer JOIN dataResponseConfig dRC ON mI.id = dRC.idModem
 left outer JOIN dataResponseReset dRR ON mI.id = dRR.idModem
WHERE gM.idUser = :user_id
AND (data.Time = (SELECT `Time`
                  FROM data
                  WHERE  mI.id = data.idModem
                  ORDER BY `Time` DESC
                  LIMIT 1)
     OR data.Time IS NULL)
AND (dRC.Time = (SELECT `Time`
                 FROM dataResponseConfig
                 WHERE  mI.id = dataResponseConfig.idModem
                 ORDER BY `Time` DESC
                 LIMIT 1)
     OR dRC.Time IS NULL)
AND (dRR.Time = (SELECT `Time`
                 FROM dataResponseReset
                 WHERE  mI.id = dataResponseReset.idModem
                 ORDER BY `Time` DESC
                 LIMIT 1)
     OR dRR.Time IS NULL)
AND (qSL.Time = (SELECT  `Time`
                 FROM queueSmsLog
                 WHERE  mI.id = queueSmsLog.idModem
                 ORDER BY id DESC
                 LIMIT 1)
    OR qSL.Time IS NULL) 

IS NULL - 用于万一在调制解调器响应的表中根本没有信息

mysql
  • 1 1 个回答
  • 20 Views

1 个回答

  • Voted
  1. Best Answer
    Mike
    2023-06-11T21:48:32Z2023-06-11T21:48:32Z

    如果我们假设像 dataResponseConfig 这样的表有自己的记录 ID(如果没有它们,如果突然没有,则添加),那么就会出现这样的事情:

    SELECT gM.nameGroup as nameGroup, mI.infoText,
           qSL.Time, qSL.text,
           (SELECT max(`Time`) FROM dataResponseConfig dRC WHERE mI.id = dRC.idModem) as dRC_Time,
           (SELECT max(`Time`) FROM dataResponseReset dRR WHERE mI.id = dRR.idModem) as dRR_Time,
           data.Time, data.text
      FROM groupModems gM
      left outer JOIN modemsInfo mI ON mI.idUser = gM.idUser AND mI.idGroup = gM.id
      left outer JOIN data ON mI.id = data.idModem
      left outer JOIN queueSmsLog qSL ON mI.id = qSL.idModem
    WHERE gM.idUser = :user_id
      AND ( (data.Time, data.id) = (SELECT `Time`, id FROM data
                                     WHERE mI.id = data.idModem
                                     ORDER BY `Time` DESC, id desc LIMIT 1)
         OR data.Time IS NULL)
      AND ( (qSL.Time, qSL.id) = (SELECT `Time`, id FROM queueSmsLog
                                   WHERE mI.id = queueSmsLog.idModem
                                   ORDER BY `Time` DESC, id DESC LIMIT 1)
        OR qSL.Time IS NULL)
    

    PS 如果一切都与问题中描述的表结构完全一样,并且没有 id 列,那么应该添加它,如果没有明确的唯一性,处理记录是非常困难的。这里当然有选项可以拉出类似这样的东西select max(concat(привести_к_строке(Time), text)) ...,然后将组合的字符串解析回时间和文本,但这看起来很麻烦,一点也不方便。

    • 0

相关问题

  • MySQL - 将一列中单元格的每个值与另一列中的值匹配,并将其替换为相邻列中的值

  • 帮助编写 MySQL 查询

  • SELECT 只增加 MYSQL 值

  • 创建 MySQL 表时的字段

  • 如何连接到远程mysql数据库?

  • MySQL单元格中的随机值

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5