我有以下表格:
ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
ENV AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
, teachers
和 teacher_rating
。
cities
包含以下列:
teachers
teacherID,location,name,othercities,status
包含以下列:
teacher_rating
ratingId, teacherId,content,ratingNumber,created,status,userName
包含以下列:
cities
我正在尝试按他们的平均评分对所有教师(从id,name
到teachers
的行进行排序),这是我的php变量,带有SQL:
status=0
效果很好,唯一的问题是收视率平均值包含$q="SELECT
*,
AVG(pr.ratingNumber) AS rating_average
FROM teachers as p
LEFT JOIN teacher_rating pr
ON pr.teacherId = p.teacherID
WHERE p.location=(SELECT `name` FROM `cities` WHERE `id`=:location) AND p.status=0 OR p.othercities REGEXP CONCAT('[[:<:]](', :location,')( |)[[:>:]]') AND p.status=0
GROUP BY p.teacherID
ORDER BY rating_average DESC
";
表中的收视率,其中teacher_rating
,我希望它仅使用status=1
中的值来计算平均收视率teacher_rating
。
我不确定如何解决此问题,谢谢您的帮助!
答案 0 :(得分:1)
如何在连接中添加pr.status = 0?
ON pr.teacherId = p.teacherID AND pr.status=0
答案 1 :(得分:0)
您正在混合AND
和OR
,因此应使用括号。我想你打算:
WHERE p.status = 0 AND
pr.status = 0 AND
(p.location = (SELECT `name` FROM `cities` WHERE `id`=:location) OR
p.othercities REGEXP CONCAT('[[:<:]](', :location,')( |)[[:>:]]')
)