[英]MySQL - WHERE/AND with pivot table
I have 3 tables: 我有3张桌子:
CLINICS 临床杂志
id | name | description | lat | lng | opening_hours| logo | address | city | zip | phone_number | email | url | gmaps_link | marker | created_at | updated_at
SERVICES 服务
id | name | created_at | updated_at
CLINIC_SERVICES CLINIC_SERVICES
clinic_id | service_id
This query should return two results, but at the moment it is returning 0: 此查询应返回两个结果,但此刻返回0:
SELECT * FROM
(SELECT clinics.id as cid, clinics.lat, clinics.lng, clinics.opening_hours,
clinics.logo, clinics.address, clinics.city, clinics.name, clinics.description,
clinics.zip, clinics.phone_number, clinics.email, clinics.url, clinics.gmaps_link,
clinics.marker,
countries.full_name AS country,
(6378 * acos(
cos(radians(-33.84801)) * cos(radians(lat)) *
cos(radians(lng) - radians(151.06488)) +
sin(radians(-33.84801)) * sin(radians(lat))))
AS distance
FROM clinics
JOIN countries ON countries.id = clinics.country_id
LEFT JOIN clinics_services ON clinics.id = clinics_services.clinic_id
WHERE clinics_services.service_id = 1 AND clinics_services.service_id = 29
GROUP BY clinics.id
) AS distances
WHERE distance < 50000
ORDER BY distance ASC
If I put OR instead of AND I am getting 5 clinics, which actually works as I think should work. 如果我用OR代替AND,我将获得5个诊所,这些诊所实际上按照我认为的方式工作。 How can I get proper result (clinic have both services)? 如何获得正确的结果(诊所同时提供两种服务)? What am I doing wrong here? 我在这里做错了什么?
According to previous similar question this should work: 根据先前的类似问题,这应该起作用:
SELECT * FROM
(SELECT clinics.id as cid, clinics.lat, clinics.lng, clinics.opening_hours,
clinics.logo, clinics.address, clinics.city, clinics.name, clinics.description,
clinics.zip, clinics.phone_number, clinics.email, clinics.url, clinics.gmaps_link,
clinics.marker,
countries.full_name AS country,
(6378 * acos(
cos(radians(-33.84801)) * cos(radians(lat)) *
cos(radians(lng) - radians(151.06488)) +
sin(radians(-33.84801)) * sin(radians(lat))))
AS distance
FROM clinics
JOIN countries ON countries.id = clinics.country_id
LEFT JOIN clinics_services ON clinics.id = clinics_services.clinic_id
WHERE clinics_services.service_id = 1 OR clinics_services.service_id = 29
GROUP BY clinics.id
HAVING SUM(clinics_services.service_id = 1) > 0 AND SUM(clinics_services.service_id = 29) > 0
) AS distances
WHERE distance < 50000
ORDER BY distance ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.