Mysql query întrebare despre a avea și conta

0

Problema

În această interogare*, I lista și sortați rânduri din "mytableabc" de latitudine, longitudine, diverse criterii,... de la aproape de departe sau de scor și de lucru/listare date și cred că-i bine/repede suficienta!?

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

--problema

în linii diferite și fișiere eu am nevoie doar de numărul total count(id) de a se întoarce elemente cu aceleași criterii... am încercați să adăugați count(id), dar nu dă numărul corect total și, de asemenea, lista de linii, vreau doar numărul total(ca de obicei conta interogare nu) nu linie de date

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

- de asemenea, această interogare fără distanță/latitudine/longtitude criterii funcționează bine, revenind doar numărul total... dar am nevoie pentru a adăuga distanta de interogare pentru această interogare

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

nu sunt sql expert și da, după cum vedeți am nevoie de unul. multumesc.

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

Cel mai bun răspuns

0

Planul A:

Muta distance verifica la WHERE clauză. Aceasta elimină necesitatea pentru HAVING în timp ce filtrarea mai mult, astfel încât COUNT nu va fi umflate.

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;

Mă aștept ca FULLTEXT index pentru a fi utilizate în primul rând, cu alte două teste (= și la distanță), fiind verificate pentru toate rândurile întors de la FT căutare.

Planul B:

Continuați să utilizați HAVING, dar au o subinterogare. (Aceasta este, probabil, mai lent.)

2021-11-18 04:19:40

analizez/de referință și planul selectat. mulțumesc pentru răspuns rapid
evet

În alte limbi

Această pagină este în alte limbi

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