这是我的问题:我有两个表 - zipcodes表和供应商表。 我想要做的是,当我输入邮政编码时,让所有供应商(基于他们的邮政编码)在一定范围内。我到目前为止工作了。
但事情就是这样。我需要根据距离划分结果。我需要有几个小组:10英里内,50英里内,100英里内。我想做的(如果可能的话)是将10英里以下的所有值更改为10,将介于11和50之间的值更改为50以及将介于51和100之间的值更改为100。
到目前为止,这是我的查询,它返回正确的结果。我需要帮助如何用我需要的实际距离值代替。
SELECT SQL_CALC_FOUND_ROWS
3959 * 2 * ASIN(SQRT(POWER(SIN(( :lat - zipcodes.zip_lat) * pi()/180 / 2), 2) + COS( :lat * pi()/180) * COS(zipcodes.zip_lat * pi()/180) * POWER(SIN(( :lon - zipcodes.zip_lon) * pi()/180 / 2), 2))) AS distance,
vendors.*
FROM
guzaba_vendors AS vendors
INNER JOIN guzaba_zipcodes AS zipcodes ON zipcodes.zip_code = vendors.vendor_zipcode
WHERE
vendors.vendor_status != 4
GROUP BY
vendors.vendor_id
HAVING distance < 100
答案 0 :(得分:1)
使用SELECT t.*,
CASE WHEN t.distance < 10 THEN 10
WHEN t.distance between 11 and 50 THEN 50
ELSE 100
END as new_distance
FROM ( Your Query Here ) t
:
>> 2
答案 1 :(得分:1)
向SELECT
添加新列 - 包含代表距离的数字的部分:
3 - &gt;在10英里内
2 - &gt;在50英里内
1 - &gt;在100英里内
代码:
CAST((distance < 10) AS SIGNED INTEGER) + CAST((distance < 50) AS SIGNED INTEGER) + CAST((distance < 100) AS SIGNED INTEGER) AS goodName