Mysql query questione di avere e conte

0

Domanda

In questa query*, elenco e ordinare le righe da "mytableabc" di latitudine, longitudine, criteri diversi,... dal più vicino al più lontano o il punteggio e il suo lavoro/elenco dati e credo che il suo bene/abbastanza veloce!?

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

in diverse linee e i file di cui ho bisogno solo numero totale count(id) di restituzione di elementi con lo stesso criterio... provo ad aggiungere count(id), ma non dà un corretto conteggio totale e anche la lista delle linee, voglio solo numeri totali(come normalmente contare query) non di linea dati

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

--anche questa query senza distanza/latitudine/longtitude criteri di opere buone, di ritorno solo il numero totale... ma ho bisogno di aggiungere distanza query di query

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

io non sono esperto sql e sì, come vedi, ho bisogno di uno. grazie.

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

Migliore risposta

0

Piano A:

Spostare il distance di controllo per la WHERE clausola. Questo elimina la necessità per HAVING mentre il filtro più, in modo che il COUNT non sarà gonfiato.

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;

Mi aspetto che il FULLTEXT l'indice da utilizzare prima, con le altre due prove= e a distanza) corso di controllo per tutte le righe restituite dalla FT di ricerca.

Piano B:

Continuare a utilizzare HAVINGma hanno una sottoquery. (Questo è probabilmente più lento.)

2021-11-18 04:19:40

analizzo/benchmark e del piano selezionato. grazie per la risposta rapida
evet

In altre lingue

Questa pagina è in altre lingue

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