항목 테이블과 범주 테이블이 있습니다. 각 항목은 사용자가 지리적으로 검색 할 수 있도록 좌표, 위도 (경도) 및 경도 (경도)와 함께 저장됩니다.서로 다른 결과를 산출하는 두 개의 동일한 수식
내가 항목을 검색 할 때 사용자와 똑같은 위도와 경도를 가진 검색어는 하나의 검색어에는 표시되지만 다른 검색어에는 표시되지 않습니다.
하나의 쿼리는 범주 (2) 내의 모든 항목을 범위 (< 1)로 선택하기 만합니다.
SELECT *, c.name as category, c.category_id as CATid,
(3959 * acos(cos(radians(52.993252))
* cos(radians(i.latitude))
* cos(radians(i.longitude) - radians(-0.412470))
+ sin(radians(52.993252))
* sin(radians(i.latitude)))) AS distance
from items i
join categories c on i.category=c.category_id
where i.category=2 group by i.item_id
HAVING distance < 1
order by distance
는 다른 쿼리는 모든 범주를 선택하고 거리에 대한 검색 매개 변수를 변경하는 경우, (< 1)
SELECT *, (SELECT (count(3959 * acos(cos(radians(52.993252))
* cos(radians(latitude))
* cos(radians(longitude)
- radians(-0.412470))
+ sin(radians(52.993252))
* sin(radians(latitude))))) AS distance
FROM items
WHERE category = category_id
HAVING distance < 2 ) AS howmanyCat,
(SELECT name FROM categories WHERE category_id = c.parent) AS parname
FROM categories c ORDER BY category_id, parent
이상하게 지정된 지리적 범위 내에서, 각 카테고리 내의 항목의 수를 계산 두 번째 쿼리에서 으로 찾습니다.
아이디어가 있으십니까?
Here is a fiddle to show what I mean
첫 번째 쿼리는 하나의 행을 생성합니다. 따라서 count() 내에서 쿼리를 모방 한 경우 1을 반환해야합니까? 이것은 내가 앨리어스를 검색하려고 생각할 수있는 유일한 방법 이었지만 더 큰 앨리어스 안에 하나의 필드 만 가질 수는 없었습니다. - 그것이 의미가있는 경우 –
첫 번째 쿼리에는 GROUP BY가 있지만 두 번째 쿼리에는 GROUP BY가 없습니다. . HAVING 절은 데이터 게시 그룹화에서 작동합니다. – gwaigh
님이 item_id 그룹을 첫 번째 검색어와 동일하게 추가하려고 시도했습니다. 변경하지 않습니다. –