SELECT 파트에서 클라이언트로 돌아가지 않고 카운트에만 MySQL 변수 사용
TL;DR
행당 조건부로 증가한 MySQL 변수를 사용합니다.이 변수는 다음과 같은 경우에만 필요합니다.HAVING절, 그러나 강제로 증분을 선택했습니다.
클라이언트에 대한 값을 다시 선택하지 않고 각 행에 대해 변수를 증분할 수 있습니까?
설명 및 예제가 포함된 컨텍스트
VBulletin 포럼 소프트웨어는 스레드 응답을 저장합니다.post열이 있는 테이블visible0은 잠금 해제 대기, 1은 표시, 2는 소프트 삭제를 의미합니다.페이지의 게시물을 가져오는 MySQL 쿼리(일반적으로 10개)를 작업하고 있습니다.사용자는 다음과 같은 게시물만 볼 수 있습니다.visible = 1하지만 다른 사람들도 마찬가지입니다.
먼저 사용자 그룹을 기준으로 필터링합니다.그러나 게스트를 위한 게시물이 2페이지일 수 있기 때문에 호출이 혼란스러울 수 있습니다. 이 페이지 이전에 삭제/승인되지 않은 게시물이 존재하기 때문에 진행자를 위한 3페이지입니다.
이러한 이유로, 제 컨셉은 모든 포스트 ID를 선택하고 페이지당 10개로 제한하는 것입니다.visible = 1첫 페이지에 10개의 보이는 게시물과 2개의 삭제된 게시물이 포함되어 있으면 mods는 12개의 게시물을 얻고 일반 사용자는 10개만 받습니다.그러나 페이징은 삭제된 게시물이 변경되지 않기 때문에 둘 다 동일합니다.
이 질문에서 영감을 받아 다음과 같은 질문을 작성합니다.
SET @visible_sum = 0;
SELECT postid, visible, @visible_sum := @visible_sum + IF(visible = 1, 1, 0)
FROM post
WHERE threadid = 38325
GROUP BY postid
HAVING @visible_sum < 10
ORDER BY dateline;
보시는 것처럼 10개의 삭제되지 않은 게시물과 4개의 삭제된 게시물(강조 표시)이 있습니다.수정 횟수를 줄이면 이 쿼리는 절제되지 않은 사용자에게 다시 사용될 수 있습니다.
SELECT postid, visible, @visible_sum := @visible_sum + 1
...
HAVING @visible_sum < 10 AND visible = 1
따라서 일반적으로 필요에 따라 작동합니다.하지만 저는 항상 카운터를 받는다는 사실이 마음에 들지 않습니다.내 애플리케이션에는 포스트 ID만 사용됩니다. 즉,SELECT postid FROM posts ...충분할 것 같습니다.변수를 사용하지 않고 어떻게 변수를 계산할 수 있는지 모르겠습니다.SELECT부분 - 클라이언트에 반환된 행의 필드가 자동으로 생성됩니다.저는 MySQL을 사용하고 있으며, 현재 MariaDB 10.1에 있습니다.
쿼리를 하위 쿼리로 이동합니다.
SELECT postid, visible
FROM (
SELECT postid, visible, @visible_sum := @visible_sum + IF(visible = 1, 1, 0)
FROM post
CROSS JOIN (SELECT @visible_sum := 0) AS vars
WHERE threadid = 38325
HAVING @visible_sum < 10
ORDER BY dateline
) AS x
당신은 또한 하지 말았어야 했습니다.GROUP BY postid집계 기능이 없는 경우.
언급URL : https://stackoverflow.com/questions/57629672/use-mysql-variable-only-for-counting-without-returning-to-client-in-select-part
'codememo' 카테고리의 다른 글
| AuthorizationServerConfigurerAdapter가 더 이상 사용되지 않습니다. (0) | 2023.07.07 |
|---|---|
| .gitignore를 사용하지 않고 Git이 파일을 무시하도록 만드는 방법은 무엇입니까? (0) | 2023.07.07 |
| 열 최대 값 길이가 아닌 열 값 길이 가져오기 (0) | 2023.07.07 |
| SQL Server의 T-SQL STOP 또는 ABROT 명령 (0) | 2023.07.07 |
| xtable 사용 시 data.frame 행 이름 제거 (0) | 2023.07.07 |

