Mysql query otázku o s a počítat

0

Otázka

V tomto dotazu*, jsem seznam a seřazení řádků z "mytableabc" podle zeměpisné šířky, délky, různé charakteristiky,... z blízko nebo daleko skóre a jeho pracovní/výpis data a myslím, že jeho dobře/rychle enought!?

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ém

v různých tratích a soubory potřebuji pouze celkový počet count(id) vrací prvky s stejné charakteristiky... snažím se přidat count(id), ale není to dává správný počet celkem a také seznam linek, chci jen celková čísla(jako obvykle počítat dotaz) není datová linka

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

- také tento dotaz, aniž vzdálenost/latitude/longtitude kritéria funguje dobře, vracející se pouze celkový počet, ale musím přidat vzdálenost dotaz na tento dotaz

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

nejsem sql expert a ano, jak vidíte, já potřebovat jeden. děkuji.

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

Nejlepší odpověď

0

Plán A:

Přesunout distance podívejte se na WHERE doložka. To eliminuje potřebu HAVING při filtrování více, tak, že COUNT nebude nadsazené.

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;

Očekávám, že FULLTEXT index se použije jako první, s dalšími dvěma testy (= a vzdálenosti) být kontrolována pro všechny řádky, které jsou vráceny z FT hledání.

Plán B:

I nadále používat HAVING, ale poddotaz. (To je pravděpodobně pomalejší.)

2021-11-18 04:19:40

analyzuji/měřítko a plán vybrané. děkuji za rychlou odpověď
evet

V jiných jazycích

Tato stránka je v jiných jazycích

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