2012-01-09 2 views
0

사용자 기본 설정을 추적하는 mysql 테이블이 있습니다. 테이블은 USER_ID, 이름과 타임 스탬프로 구성사용자 당 150 개의 최신 항목 유지

항목이 이미 존재하는 경우

, 내가

지금 현재 시간에 타임 스탬프를 업데이트 (USER_ID는, 이름이 PK가) 무엇을 내가 원한다면, 사용자 당 150 개의 최신 항목이 활성화되어 있어야합니다. 사용자가 로그인 할 때마다 쿼리를 실행하여 삭제할 항목을 삭제하려고합니다.

그러나 나는 그런 식으로 뭔가를 달성하는 삭제 쿼리 주위에 내 머리를 얻을 수 없습니다.

어떤 도움이 필요합니까?

+1

왜 근무에 가입하여 삭제 된 모든 항목이 테이블? 왜 아무것도 지우겠습니까? 마지막 항목을 150 개 선택하고 활성 항목으로 취급하는 것이 가장 좋은 이유는 무엇입니까? –

답변

1

나는 대답을 편집했다. 내가 여기에 다른 모든 행을 삭제하는 방법은 .. 그게 당신이 원하는 게 아니에요, 150 가장 최근의 삭제를 말하고 있었다 :

DELETE FROM preferences WHERE user_id NOT IN (SELECT user_id FROM preferences ORDER BY timestamp DESC LIMIT 150) 
+0

이것은 또한 작동하지 않습니다. Mysql은 하위 쿼리에서 삭제할 테이블을 사용할 수 없다고 말합니다. – Thomas

0

은 기본적으로 여기 http://helphow.info/?qa=209695/solved-mysql-delete-from-limit-x-y-would-not

언급 해킹을 이어, 나는 임시을 생성 내가 삭제하고 싶다고 다음은 내부가

완벽

+0

당신은 (끔찍한) 논리의 함의를 깨닫고 있습니까? –

+0

나 한테 설명 할 수있을거야? – Thomas

+0

'내가 원했던 것은 150 명의 사용자가 가장 최근에 등록한 항목입니다. '- 마지막 150 개의 레코드를 선택하면됩니다. 150 레코드를 활성화하려면 물건을 삭제하지 마십시오. 그것은 논리에서 나쁜 접근법입니다. 데이터베이스를 사용하여 데이터를 저장하고 관계를 사용하여 관심있는 데이터를 얻습니다. 데이터베이스 수준에서 논리를 구현하면 (특정 조건이 충족 될 때 레코드 삭제) 항상 나쁜 것입니다. 데이터베이스는 논리적 인 결정을 내리지 않고 데이터를 보관하고 조작하기위한 것입니다. 그러나, 그것은 귀하의 코드와 귀하의 DB를 그래서 당신은 자유롭게 무엇이든 할 수 있습니다. –

관련 문제