Запрос mysql вопрос о наличии и количестве

0

Вопрос

В этом запросе* я перечисляю и сортирую строки из "mytableabc" по широте, долготе, различным критериям,... от близкого до дальнего или по баллам и его рабочим данным/данным о списках, и я думаю, что это достаточно хорошо/быстро!?

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

--проблема

в разных строках и файлах мне нужно только общее количество(идентификатор) возвращаемых элементов с одинаковыми критериями... я пытаюсь добавить счетчик(идентификатор), но он не дает правильного общего количества, а также строк списка, мне просто нужно общее количество(как обычно делает запрос подсчета), а не строка данных

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

--также этот запрос без критериев расстояния/широты/дальности хорошо работает, возвращая только общее число... но мне нужно добавить запрос на расстояние к этому запросу

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

я не специалист по sql, и да, как вы видите, он мне нужен. Спасибо.

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

Лучший ответ

0

План А:

Переместите distance проверьте, чтобы WHERE пункт. Это устраняет необходимость в HAVING в то время как фильтрация больше, так что COUNT не будет раздуваться.

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;

Я ожидаю, что FULLTEXT индекс, который будет использоваться первым, с двумя другими тестами (= и расстояние) проверяется для всех строк, возвращенных из поиска FT.

План Б:

Продолжайте использовать HAVING, но есть подзапрос. (Это, вероятно, медленнее.)

2021-11-18 04:19:40

я анализирую/оцениваю и планирую выбранное. спасибо за быстрый ответ
evet

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории