Как я могу использовать SQL_CALC_FOUND_ROWS при множественном выборе - PullRequest
1 голос
/ 11 июля 2019

Я работаю над кодом нумерации страниц, который использует SQL_CALC_FOUND_ROWS (), но когда я ограничиваю результаты на странице числом, меньшим, чем общее количество результатов, «SELECT FOUND_ROWS () как общее» возвращает количество элементов на страницу ине сумма найденных строк.Поскольку я делаю выбор из второго выбора, этот результат имеет смысл, но я не знаю, как решить эту проблему.Как я могу передать итоговые результаты изнутри на внешний выбор?

Мой код (пожалуйста, игнорируйте кавычки для выхода из php):


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

1 Ответ

1 голос
/ 11 июля 2019

Похоже, что ваш внешний выбор просто упорядочивает результаты, возвращаемые из внутреннего запроса.Поскольку ваш внутренний запрос уже применил LIMIT, ваш внешний запрос фактически выполняет сортировку по частичным результатам, что мне кажется неверным.Поэтому я думаю, что вы можете полностью удалить внешний выбор, который решит вашу проблему.

Кстати, только что заметил, что модификатор запроса SQL_CALC_FOUND_ROWS и сопровождающая его функция FOUND_ROWS () устарели с MySQL 8.0.17 согласно документация

...