我想存储用户 10 个以前的密码,以便他/她不会使用旧密码。为此,我创建了一个包含 3 列的表格:
id
密码
用户 ID
现在,如果有人第十一次忘记密码并更新密码,那么它应该删除第一个旧密码,从而存储新密码。 sql 查询是什么?
我首先检查了 useridentity
的 count
,它运行良好:
SELECT userIdentity, COUNT(userIdentity) FROM passwordhistory;
现在,如果 count >10
那么我想使用与其关联的最小 id 删除行。
DELETE FROM passwordhistory
WHERE id = (SELECT MIN(id)
FROM passwordhistory where userIdentity in
(SELECT userIdentity, COUNT(userIdentity)
FROM passwordhistory
)
)
但这对于如何删除 count>10
的 userIdentity
来说并不完整。
密码历史记录.java
package com.tcs.webrtc.model;
import java.io.Serializable;
@Entity
@Table(name="passwordhistory")
public class PasswordHistory implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2621325802545502360L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@NotNull
private String userIdentity;
@NotNull
private String password;
public String getUserIdentity() {
return userIdentity;
}
public void setUserIdentity(String userIdentity) {
this.userIdentity = userIdentity;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最佳答案
既然你使用mysql,你应该创建一个要删除的id列表,然后删除它们:
创建列表:
Session session=sessionFactory.getCurrentSession();
String queryToCheckPassword="
SELECT MIN(id)
FROM passwordhistory where userIdentity in
(SELECT userIdentity
FROM passwordhistory
group by userIdentity
having COUNT(userIdentity) >10
)
";
List listToDel = session.createSQLQuery(queryToCheckPassword).list();
return listToDel .size()>0?true:false;
按 id 删除(这是 java 人来的地方);
<for each item in listToDel >
delete from passwordhistory where id = :id
关于mysql - 如果某个项目出现超过 10 次,请将其删除并存储新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37959817/