Pregunta de consulta de MySQL sobre tener y contar.
En esta consulta*, listo y ordeno filas de “mytableabc” por latitud, longitud, varios criterios,… de cerca a lejos o puntaje y sus datos de trabajo/listado y creo que es lo suficientemente bueno/rápido!
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 distancia,
(match(colone,coltwo) against(‘searchkeywordabc’ in boolean mode)) as puntaje,
id,colone,coltwo,latitude,longtitude,colthree
from mytableabc
where (colone=’sampleforsomething’)
and (match(colone,coltwo) against(‘searchkeywordabc’ in boolean mode))
having distancia <= 5 order by distancia asc limit 0,50
–problema
En diferentes líneas y archivos, necesito solo el número total de elementos que se devuelven con los mismos criterios… intento agregar count(id), pero no da el recuento total correcto y también enumera las líneas, solo quiero el número total (como lo hace la consulta count) no datos de línea.
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 distancia,
(match(colone,coltwo) against(‘searchkeywordabc’ in boolean mode)) as puntaje,
id,colone,coltwo,latitude,longtitude,colthree
from mytableabc
where (colone=’sampleforsomething’)
and (match(colone,coltwo) against(‘searchkeywordabc’ in boolean mode))
having distancia <= 5 order by distancia asc limit 0,50
–también esta consulta sin criterios de distancia/latitud/longitud funciona bien, devolviendo solo el número total… pero necesito agregar la consulta de distancia a esta consulta.
select count(id) from mytableabc where (colone=’sampleforsomething’) and (match(colone,coltwo) against(‘searchkeywordabc’ in boolean mode))
No soy un experto en SQL y como puedes ver, necesito uno.
Gracias.
davy.ai
Solución
Intenta usar la función
COUNT()
con una cláusulaGROUP BY
:sql
SELECT COUNT(id)
FROM mytableabc
WHERE (colone='muestraalgoalgo')
AND (match(colone,coltwo) against('palabradebúsquedaabc' in boolean mode))
GROUP BY round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitud)) * cos(radians(longitud) - radians('29.123456')) + sin(radians(latitud)) * sin(radians('40.123456')))), (2))
HAVING distancia <= 5
ORDER BY distancia ASC
LIMIT 0,50;