MySQL更改返回值

时间:2016-11-01 08:55:10

标签: mysql

这是我的问题:我有两个表 - 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

2 个答案:

答案 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