Mysql sorgusu sahip olma ve sayma hakkında soru

0

Soru

Bu sorguda*, "mytableabc" satırlarını enlem, boylam, çeşitli ölçütlere göre listeler ve sıralarım... yakın mesafeden veya skordan ve çalışma / listeleme verilerinden ve bence yeterince iyi/hızlı!?

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

--sorun

farklı satırlarda ve dosyalarda, aynı kriterlere sahip dönen öğelerin yalnızca toplam sayı sayısına(ıd) ihtiyacım var... count(id) eklemeye çalışıyorum, ancak doğru sayım toplamını ve ayrıca liste satırlarını vermiyor, sadece toplam sayıları(normalde sayım sorgusunun yaptığı gibi) veri satırı değil istiyorum

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

-- ayrıca, mesafe/enlem / boylam ölçütü olmayan bu sorgu, yalnızca toplam sayıyı döndürerek iyi çalışır... ancak bu sorguya mesafe sorgusu eklemem gerekiyor

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

sql uzmanı değilim ve evet, gördüğünüz gibi bir tanesine ihtiyacım var. teşekkür ederim.

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

En iyi cevabı

0

A Planı:

Taşı distance kontrol et WHERE cümle. Bu ihtiyacı ortadan kaldırır HAVING daha fazla filtreleme yaparken, böylece COUNT şişirilmeyecek.

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;

Bekliyorum FULLTEXT diğer iki testle birlikte ilk önce kullanılacak dizin (= ve mesafe) FT aramasından döndürülen tüm satırlar için kontrol ediliyor.

B Planı:

Kullanmaya devam et HAVING ama bir alt sorgu var. (Bu muhtemelen daha yavaştır.)

2021-11-18 04:19:40

analiz ediyorum/kıyaslıyorum ve seçilmeyi planlıyorum. hızlı cevap için teşekkür ederiz
evet

Diğer dillerde

Bu sayfa diğer dillerde

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