Mysql query pergunta sobre ter e contagem

0

Pergunta

Nesta consulta*, eu listar e ordenar as linhas da "mytableabc" por latitude, longitude, vários critérios,... de perto e de longe ou de pontuação e o seu trabalho/listagem de dados e eu acho que é bom/rápido o bastante!?

select 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
    (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
id,colone,coltwo,latitude,longtitude,colthree 
        from mytableabc 
        where (colone='sampleforsomething') 
            and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                having distance <= 5 order by distance asc limit 0,50

--o problema

em linhas diferentes e arquivos de que eu preciso só número total count(id) de devolver elementos com os mesmos critérios... eu tento adicionar contagem(id), mas não dá a correta contagem total e, também, lista de linhas, eu só quero que o total de números(como normalmente contagem de consulta não linha de dados

select 
    count(id), 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
        (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
    id,colone,coltwo,latitude,longtitude,colthree 
            from mytableabc 
            where (colone='sampleforsomething') 
                and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                    having distance <= 5 order by distance asc limit 0,50

- além disso, essa consulta sem distância/latitude/longitude critérios de boas obras, retornando apenas o número total... mas eu preciso adicionar distância de consulta para esta consulta

select count(id) from mytableabc where (colone='sampleforsomething') and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))

eu não sou perito em sql e sim como você ver que eu preciso de um. obrigado.

geolocation mariadb mysql php
2021-11-17 21:58:00
1

Melhor resposta

0

Plano A:

Mova o distance de seleção para o WHERE cláusula. Isso elimina a necessidade de HAVING embora a filtragem mais, de modo que o COUNT não será inflado.

select  count(*)
    from  mytableabc
    where  (colone='sampleforsomething')
      and  (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
      AND  (6371 * acos(cos(radians('40.123456')) * 
        cos(radians(latitude)) * cos(radians(longtitude) -
        radians('29.123456')) + sin(radians(latitude)) *
        sin(radians('40.123456')))) < 5;

Espero que o FULLTEXT o índice a ser utilizado pela primeira vez, com os outros dois testes (= e a distância) sendo verificada para todas as linhas retornadas da FT pesquisa.

Plano B:

Continuar a usar HAVING, mas ter uma subconsulta. (Este é, provavelmente, mais lenta).

2021-11-18 04:19:40

eu analisar/referência e plano selecionado. obrigado pela resposta rápida
evet

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................