2015-07-02 74 views
0

我有一些點存儲在MySQL數據庫中,它們存儲爲帶有x和y值的POINT類型。我正在嘗試使用WHERE子句中的x和y值來搜索並返回特定點。MySQL:無法使用WHERE子句返回POINT類型

繼承人查詢的一個例子,我想獲得工作:

"SELECT id, x(coords) AS lng, y(coords) AS lat 
FROM my_points 
WHERE x(coords) = $lng AND y(coords) = $lat" 

但這不起作用。我沒有MySQL空間類型的經驗,任何幫助將不勝感激!

從下面給出一些更多的信息評論:

我應該說我其實使用PHP框架的ORM數據庫查詢中,我上面寫的SQL只是想表示什麼,我所提到的試圖實現使用ORM的語法。我不認爲問題與ORM有關,儘管我在之前的'WHERE'子句中使用了其他函數。我只是不太確定它是否正確在'WHERE'子句中使用'x()= lng AND y()= lat'。使用正常的正確的SQL語法,你在WHERE子句中使用x()AND y()給了我我要找的東西?

+0

您錯過了「from from clause」 –

+0

如果您願意,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更容易地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

0

如果你的列名真正對他們有括號,你需要備份打勾他們:

SELECT `id`, `x(coords)` AS `lng`, `y(coords)` AS `lat` 
FROM `my_points` 
WHERE `x(coords)` = $lng AND `y(coords)` = $lat 

所有未引用的列名和表名可以由在服務器的默認字符集的任何字母數字字符,再加上字符'_'和'$'。名稱可以以名稱中包含數字的任何合法字符開頭。

列和表名稱應在反標記中,它允許使用除了反碼,ASCII 0和ASCII 255之外的任何字符。當名稱包含特殊字符或保留字時,此名稱很有用。

對於數據庫和表名稱,還有兩個額外的限制,即使您反覆選中它們。首先,你不能使用'。'字符,因爲它是database_name.table_name和database_name.table_name.col_name表示法中的分隔符。其次,您不能使用UNIX或Windows路徑名分隔符('/'或'\')。

+0

我應該提到,即時通訊實際使用PHP框架ORM進行數據庫查詢,我上面編寫的SQL只是假設我正在試圖用ORM的語法來實現它。我不認爲問題與ORM有關,儘管我在之前的'WHERE'子句中使用了其他函數。我只是不太確定它是否正確在'WHERE'子句中使用'x()= lng AND y()= lat'。使用正常的正確的SQL語法,你在WHERE子句中使用x()AND y()給了我我要找的東西? – ThriceGood

+0

如果你已經知道座標,你爲什麼要查詢它們?你有沒有試過查詢@ThriceGood?它是否返回錯誤? –