mysql - 订单、分组和搜索查询。选择太多

标签 mysql sql query-optimization

我正在运行这个查询,它由 3 个递归选择组成。

select idigorUserFields 
from ( select * 
       from ( select * 
              from igorUserFields f
              where f.idigorUsers = 1
              order by f.idigorUserFields desc) tbl
       group by tbl.idigorUserFieldTemplates ) tbl2
where value="qf" and idigorUserFields = 28

我想做的很简单:

  • 获取所有字段,按插入日期排序(我使用主键)

  • 获取字段最后插入的值 (idigorFieldTemplates)

  • 将最后插入的字段与我即将插入的字段进行比较,以节省数据库空间

一些相关信息:

  • idigorUserFieldTemplates 是“html 用户字段表”的主键

  • 最后插入的值是程序上显示的值

另外,我有一个 sqlfiddle !有一些数据可供测试。

我的问题是:我可以让这个查询变得更好吗?我需要用什么来做到这一点。

最佳答案

好吧,看起来您想要获取给定用户和值的最后插入的值,然后将其与您要插入的数据进行比较。这是我解决这个问题的方法

SELECT a.idigorUserFieldTemplates
FROM igorUserFields AS a
INNER JOIN (SELECT MAX(idigorUserFields) as max_id FROM igorUserFields WHERE idigorUsers = 1 AND value="qf") AS b
ON a.idigorUserFields= b.max_id 

子查询为我提供了最大的 idigorUserFields,其中 idigorUsers = 1 AND value="qf"。为此,您必须假设主键 (idigorUserFields) 随日期递增。您在帖子中指出确实如此,所以希望这个假设是正确的。

一旦我们获得了最后更新的记录,我们就会与 igorUserFields 一起返回以获取 idigorUserFieldTemplates 的相应值

编辑: 我想为给定的用户和字段插入最后一个。然后将其与我要插入的内容进行比较。 如果我不够清楚我想要什么,我很抱歉。 我修改了上面的sql,得到了我想要的:

SELECT a.* FROM igorUserFields
AS a INNER JOIN 
(SELECT MAX(idigorUserFields) as max_id
FROM igorUserFields WHERE idigorUsers = 1 and idigorUserFieldTemplates =6) AS b 
ON a.idigorUserFields= b.max_id
AND value="qf"

谢谢!现在我有了一个更有效的解决方案:)

关于mysql - 订单、分组和搜索查询。选择太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25726447/

相关文章:

sql - 使用 VB.NET 检查 MSSQL 中是否存在数据库的最简单方法是什么?

如果使用 ORDER BY 字符串列,MySQL 查询需要很长时间才能执行

sql-server - 在 CTE 或子查询中优化

php - Mysql服务器数据插入错误

MySQL SELECT OpenCarts 数据库中的重复行

mysql - 通用函数 ‘dbListFields’ 、类 “numeric” 的值无效,应为 “character”

javascript - 在特定日期之前通过电子邮件发送通知?

mysql - 查找引用特定列的表(包含数据)

sql - 查询在 PostgreSQL 中除以零错误

MySQL性能: join of two tables on common foreign key: still "using where"