我正在运行这个查询,它由 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/