我有一个名为'user_car'字段的表。它由cat'd下划线分隔值(用户的id _ car id)
组成user_car rating
-----------------------------
11_56748 4
13_23939 2
1_56748 1
2001_56748 5
163_23939 1
我需要获得任何“汽车”的平均评分。在我的示例表中,只列出了2辆车:56748和23939.所以说我想得到汽车的平均评级:56748,到目前为止我有这个SQL,但我需要正确的正则表达式。如果我完全偏离基地,请告诉我。谢谢!
$sql = "
SELECT AVG 'rating' FROM 'car_ratings'
WHERE 'user_car' REGEXP '';
";
答案 0 :(得分:5)
您可以使用以下方式提取车辆ID:
substring(user_car from (locate('_', user_car) + 1))
这将允许你这样做:
select substring(user_car from (locate('_', user_car) + 1)) as car_id,
avg(rating)
from car_ratings
group by car_id
但是,这是一个坏主意。将user_car
拆分为user_id
和car_id
会更好。
答案 1 :(得分:3)
我不明白为什么你需要使用REGEX ...
SELECT AVG(`rating`) FROM `car_ratings` WHERE `user_car` LIKE '%_56748'
正则表达速度很慢,很容易在脚下射击你。我学会了尽可能避免在MySQL中使用它们。