2014-11-14 58 views
0

我有以下SQL查詢:修改值

SELECT town,latitude,longitude FROM coordinates 

下面將返回e.g

"California,10.02313,20.123213" 

我使用的查詢結果放在gmaps標記。但是如果我爲加利福尼亞州有10個標記,他們會堆積起來,因爲座標是一樣的。

我想給lat和lng添加一個(非常小的)隨機數,所以標記會出現在加州的限制內,但是它們不會堆積。

我如何添加,可以說FLOOR(RAND() * 0.0030)+0.0040以緯度和經度這樣的結果將是:

"1,California,10.02322,20.123254" 
"2,California,10.02313,20.123213" 

請注意,在座標中的小的變化,但還在裏面加利福尼亞州的限制(使用非常小的變化)

+0

我也看到你添加了一個行號給SQL,但是你沒有在你的問題中說明它? – 2014-11-14 20:05:31

+0

只是爲了表明查詢將返回多行。 – Theodoros80 2014-11-14 20:07:15

+0

@ConradFrix實際上,我在問行號是否是OP期望的結果。不確定你指的是什麼。 – 2014-11-14 20:07:46

回答

2

SELECT可以跟隨任意表達式,它們不必僅僅是列名。所以,你可以寫:

SELECT town, 
     latitude + FLOOR(RAND() * 0.0030)+0.0040 AS latitude, 
     longitude + FLOOR(RAND() * 0.0030)+0.0040 AS longitude 
+0

我現在會測試它...... – Theodoros80 2014-11-14 20:08:23

+0

FLOOR(RAND()* 0.0030)不總是返回0嗎? – 2014-11-14 20:38:37

+0

@ Invent-Animate是的。答案是更通用的,任何表達式都可以使用。無論是他想要的正確公式是正交的。 – Barmar 2014-11-14 20:43:29

0

的+0.004是不必要的,因爲它沒有隨機的數據,它只是增加了一個常量它

SELECT town, FLOOR(RAND() * 0.0030) + latitude as latitude, FLOOR(RAND() * 0.0030) + longitude as longitude FROM coordinates

我也建議不要因爲它增加地板很可能只是增加0到列(因爲它舍入向下偏移到一個整數),而不是像做

SELECT town, (RAND() * 0.0030 + latitude) as latitude, (RAND() * 0.0030 + longitude) as longitude FROM coordinates