Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL更改返回值_Mysql - Fatal编程技术网

MySQL更改返回值

MySQL更改返回值,mysql,Mysql,我的问题是:我有两个表——zipcodes表和vendors表。 我想做的是,当我输入一个邮政编码时,让所有供应商(基于他们的邮政编码)在一定半径内。到目前为止,我一直在工作 但事情是这样的。我需要根据距离来划分结果。我需要几个小组:10英里以内、50英里以内和100英里以内。我想做的是(如果可能的话)将10英里以下的所有值更改为10,11到50之间的值更改为50,51到100之间的值更改为100 这是我到目前为止的查询,它返回正确的结果。我需要帮助如何用我需要的值替换实际距离值 SELECT

我的问题是:我有两个表——zipcodes表和vendors表。 我想做的是,当我输入一个邮政编码时,让所有供应商(基于他们的邮政编码)在一定半径内。到目前为止,我一直在工作

但事情是这样的。我需要根据距离来划分结果。我需要几个小组: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
    g_vendors AS vendors
INNER JOIN g_zipcodes AS zipcodes ON zipcodes.zip_code = vendors.vendor_zipcode  
WHERE
    vendors.vendor_status != 4
GROUP BY
    vendors.vendor_id
HAVING distance < 100
选择SQL\u计算\u找到的行
3959*2*ASIN(SQRT(功率(SIN(:lat-zipcodes.zip_lat)*pi()/180/2),2)+COS(:lat*pi()/180)*COS(zipcodes.zip_lat*pi()/180)*功率(SIN(:lon-zipcodes.zip_lon)*pi()/180/2))作为距离,
供应商。*
从…起
g_供应商作为供应商
内部连接g_zipcodes作为zipcodes.zip_code=vendors.vendor_zipcode上的zipcodes
哪里
vendors.vendor\u状态!=4.
分组
vendors.vendor\u id
距离小于100的

使用
大小写表达式

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
选择t.*,
当t.距离小于10时,则为10
当t.距离在11和50之间时,则为50
其他100
以新距离结束
从(你这里的查询)t

将新列添加到您的
选择
-包含表示距离的数字的部分:

3->10英里以内

2->50英里以内

1->100英里以内

代码:

CAST((距离<10)作为有符号整数)+CAST((距离<50)作为有符号整数)+CAST((距离<100)作为有符号整数)作为goodName

谢谢!正是我要找的!我想这也是一个解决方案,但它并不完全符合我的需要。我需要10 50和100作为密钥,以便我可以将数据填充到不同的数组中并进行处理。谢谢你的快速回复!
CAST((distance < 10) AS SIGNED INTEGER) + CAST((distance < 50) AS SIGNED INTEGER) + CAST((distance < 100) AS SIGNED INTEGER) AS goodName