Requête mysql question sur le fait d'avoir et de les compter

0

La question

Dans cette requête*, j'ai la liste et trier les lignes de "mytableabc" de la latitude, de la longitude, de divers critères,... à partir de près de loin ou de score et de son travail/liste des datas et je pense que son bon/assez rapide!?

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

--problème

dans les différentes lignes et les fichiers dont j'ai besoin seulement nombre total count(id) de retour d'éléments avec les mêmes critères... j'essaie d'ajouter count(id), mais sa ne donne correct nombre total et également une liste de lignes, je veux juste les chiffres totaux(comme normalement compter de la requête n'a) pas de ligne de données

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

--aussi cette requête sans distance/latitude/longitude critères de bonnes œuvres, ne retournant que nombre total... mais j'ai besoin d'ajouter de la distance de la requête à cette requête

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

je ne suis pas sql expert et oui comme vous le voyez j'en ai besoin. je vous remercie.

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

La meilleure réponse

0

Plan A:

Déplacer le distance chèque à l' WHERE la clause. Ceci élimine le besoin pour HAVING alors que le filtrage de plus, afin que le COUNT ne sera pas gonflé.

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;

Je m'attends à la FULLTEXT indice pour être utilisé en premier, avec les deux autres tests (= et de la distance) en cours de vérification pour toutes les lignes renvoyées par le FT de recherche.

Plan B:

Continuer à utiliser HAVINGmais avoir une sous-requête. (C'est probablement plus lent.)

2021-11-18 04:19:40

j'analyse et de référence et le plan sélectionné. merci pour la réponse rapide
evet

Dans d'autres langues

Cette page est dans d'autres langues

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