sourcetip

여러 개의 선택 항목이 있을 때 SQL_CALC_Found_ROWS를 사용하려면 어떻게 해야 합니까?

fileupload 2023. 7. 22. 10:21
반응형

여러 개의 선택 항목이 있을 때 SQL_CALC_Found_ROWS를 사용하려면 어떻게 해야 합니까?

SQL_CALC_FOUND_ROWS()를 사용하는 페이지 코드를 작업하고 있지만, 페이지당 결과를 총 결과보다 적은 수로 제한하면 "SELECT FOUND_ROWS() as total"은 발견된 행의 총 수가 아닌 페이지당 요소 수를 반환합니다.제가 두 번째 선택에서 선택을 하고 있기 때문에, 이 결과는 완전히 말이 되지만 어떻게 해결해야 할지 모르겠습니다.내부에서 외부 선택으로 총 결과를 전달하려면 어떻게 해야 합니까?

내 코드(pph 이스케이프에 대한 따옴표를 무시하십시오):


SELECT SQL_CALC_FOUND_ROWS userid,contaTipo,userNome,nomeFantasia,sexo,cidade,estado,bairro,imovelN,logradouro,avaliacao,imagem,formasPagamento,estabelecimento,profissao 

FROM 

(SELECT vw_Busca.userid as userid, vw_Busca.contaTipo as contaTipo, vw_Busca.userNome as userNome, 
vw_Busca.nomeFantasia as nomeFantasia,vw_Busca.sexo as sexo, vw_Busca.cidade as cidade, vw_Busca.estado as estado, vw_Busca.bairro as bairro, 
vw_Busca.imovelN as imovelN,vw_Busca.logradouro as logradouro,tipoProfissionalPF.tipo as profissao, tipoProfissionalPJ.tipo as estabelecimento,
vw_userRating.total as avaliacao, GROUP_CONCAT(especialidades.especialidade SEPARATOR ', ') as especs,
vw_Busca.imagem as imagem, GROUP_CONCAT( DISTINCT userPagamento.formaPagamento SEPARATOR ', ') as formasPagamento

    FROM vw_Busca 

LEFT JOIN usersEspec ON usersEspec.userid=vw_Busca.userid 
LEFT JOIN especialidades ON especialidades.id=usersEspec.especialidade 
LEFT JOIN userPagamento ON userPagamento.userid=vw_Busca.userid 
LEFT JOIN profissionais ON profissionais.userid=vw_Busca.userid
LEFT JOIN tipoProfissionalPF ON tipoProfissionalPF.id=profissionais.profissao 
LEFT JOIN empresaDados ON empresaDados.userid=vw_Busca.userid
LEFT JOIN tipoProfissionalPJ ON tipoProfissionalPJ.id=empresaDados.tipoProfissionalPJ
LEFT JOIN vw_userRating ON vw_userRating.userid=vw_Busca.userid 

WHERE vw_Busca.cidadeId='$cidade' AND (vw_Busca.userNome LIKE '%".$termo."%' OR 
    vw_Busca.nomeFantasia LIKE '%".$termo."%' 
    OR vw_Busca.tags LIKE '%".$termo."%')

    GROUP BY userid LIMIT $inicio,$qtd) as mainTable

     ORDER BY mainTable.avaliacao DESC

외부 선택 항목은 내부 쿼리에서 반환된 결과를 순서대로 지정하는 것입니다.당신의 내부 쿼리는 이미 LIMIT를 적용했기 때문에, 당신의 외부 쿼리는 실제로 부분적인 결과에 대해 정렬을 수행하고 있는데, 이것은 내가 보기에 잘못된 것 같습니다.따라서 문제를 해결할 수 있는 외부 셀렉트를 모두 제거할 수 있을 것 같습니다.

참고로 SQL_CALC_FOUND_ROWS 쿼리 수정자와 함께 제공되는 FOUND_ROWS() 함수는 MySQL 8.0.17에서 더 이상 사용되지 않습니다.

언급URL : https://stackoverflow.com/questions/56992073/how-can-i-use-sql-calc-found-rows-when-having-multiple-selects

반응형