我正在运行此查询,女巫由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!用一些数据来测试。
我的问题是:我可以更好地进行此查询吗?我需要用什么来做到这一点。
答案 0 :(得分:0)
如果你想要的只是特定数据的最大id,只需指定它的顺序并限制它如此
SELECT idigorUserFields
FROM igorUserFields
WHERE idigorUsers = 1 AND value="qf"
ORDER BY idigorUserFields DESC
LIMIT 1
如果你想获得最后一个插入的值,那么你可以得到最大的idigorUserFields,假设它自动递增。
SELECT MAX(idigorUserFields) FROM idigorUserFields
然后如果您想要该字段中的特定列,则可以将其用作子查询
SELECT f.idigorUserFieldTemplates
FROM idigorUserFields f
WHERE f.idigorUserFields =
( SELECT MAX(idigorUserFields)
FROM idigorUserFields
WHERE idigorUsers = 1 AND value="qf"
)
答案 1 :(得分:0)
好吧所以看起来你想获得给定用户和值的最后一个插入值,然后将它与你要插入的数据进行比较。以下是我将如何处理
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"
谢谢!现在我得到了一个更有效的解决方案:)