2014-10-14 8 views
0

내 쿼리 : 어떻게 행이 경우 @rank 만 증가 할 수간단한 증가 카운터

1010 3 1 
1011 3 2 
1013 3 3 
1014 3 4 
1016 3 5 

:에

1010 3 1 
1011 3 2 
1013 3 4 
1014 3 5 
1016 3 7 

이 될해야 :에서

SET @rank = 0; 
SELECT Jobs.ID, Jobs.StatusID, (@rank:[email protected]+1) AS Rank 
FROM Jobs 
INNER JOIN JobStatuses ON Jobs.StatusID = JSID 
INNER JOIN JobStatusGroups ON Jobs.SGrID = JSGID 
WHERE Jobs.StatusID = 3 
ORDER BY JobTitle DESC 
LIMIT 5 

결과 실제로 삽입 되었습니까? 나는 시도하지 않았다 cross join는 작동하지 않았다.

SELECT Jobs.ID, Jobs.StatusID, (@rank:[email protected]+1) AS Rank 
FROM Jobs, (SELECT @rank := 0) tempRank 
INNER JOIN JobStatuses ON Jobs.StatusID = JSID 
INNER JOIN JobStatusGroups ON Jobs.SGrID = JSGID 
WHERE Jobs.StatusID = 3 
ORDER BY JobTitle DESC 
LIMIT 5 

를하지만 나에게 Jobs.StatusID이 존재하지 않는 없다는 오류를 준다 : 나는 또한 다음 시도했다. 대신 외부 십자가를 설정

+0

당신이 오래된 질문에 대한 내 업데이트 된 대답을하려고합니다. – Karunakar

답변

1

은 선택에 가입 (내가 십자가에 가입 선호 너무 그것 쉽게 내가 변수를 만드는 메신저 위치를 알 일명 읽기) 그 방법은 수를 늘

INSERT IGNORE INTO MyTable(MyID, UserID, JobID, StatusID, SortOrder) 
SELECT :myid, :userid, Jobs.ID, Jobs.StatusID, (@rank:[email protected]+1) AS Rank 
FROM Jobs 
INNER JOIN JobStatuses ON Jobs.StatusID = JSID 
CROSS JOIN (SELECT @rank := 0) temp 
LEFT JOIN JobStatusGroups ON Jobs.SGrID = JSGID 
WHERE ... 
ORDER BY JobTitle DESC 

을 엉망 수 성능면에서 나는 테이블의 조인 내에서 변수 인스턴스화를 사용하여 성능 문제를 발견하지 못했습니다.

시도 할 수있는 것은 ORDER BY가 주문/카운트를 엉망으로 만들었 기 때문에 캡슐화를 시도 할 수 있습니다. subselect에서

+0

''CROSS JOIN'이 어떻게 작동하는지 설명 할 수 있습니까? 쿼리 속도 측면에서 오버 헤드가 추가됩니까? – GGio

+0

@GGio yup :) 거기에 어떤 문제도 없다는 것을 알면서부터 .. 그러나 나는 그것을 시험해보고 느린 것을 수행하는지 확인해 볼 것입니다. –

+0

방금 ​​시도했지만 작동하지 않았습니다. 여전히 2 또는 3으로 무작위로 건너 뜁니다. – GGio

0

1,233,이 하나를 업데이트하십시오 : CGio..can @

SET @rank = 0; 
INSERT INTO MyTable(MyID, UserID, JobID, StatusID, SortOrder) 
SELECT myid, userid, Jobs.ID, Jobs.StatusID, (@rank:[email protected]+1) AS Rank 
FROM Jobs 
INNER JOIN JobStatuses ON Jobs.StatusID = JobStatuses.JSID 
LEFT JOIN JobStatusGroups ON Jobs.SGrID = JobStatusGroups.JSGID 
ON DUPLICATE KEY update MyID=IF((@rank:[email protected]) <> NULL IS NULL, VALUES(MyID), NULL); 
+0

이 유효하지 않습니다. 구문을 사용해 보셨습니까? –

+0

내가 대답을 편집 – Karunakar

+0

여전히 유효하지 않습니다 .. 선택과 함께 삽입을 찾습니다 ... "값"키워드는 그 같은 진술과 함께 작동하지 않습니다 –