2016-02-26 103 views
0

我有一個基於PHP的應用程序,存儲用戶輸入的發票。目前,我有存儲在MySQL數據庫中的表爲double像這樣的發票金額:MySQL搜索Double與貨幣格式

+------+--------------+--------------+----------------+----------------+-------------+-----------+---------------+-------------+-------------+-----------------+ 
| id | date_entered | invoice_date | invoice_number | invoice_amount | client_type | unique_id | supplier_type | supplier_id | category_id | childcare_hours | 
+------+--------------+--------------+----------------+----------------+-------------+-----------+---------------+-------------+-------------+-----------------+ 
| 1 | 1411098397 | 1411048800 | 123   |   0.01 |   0 |  137 |    0 |   139 |   5 |   NULL | 
| 2 | 1412123404 | 1416920400 | 5093   |   130 |   0 |  168 |    0 |   19 |   18 |   NULL | 
| 3 | 1412125933 | 1412085600 | 000   |    79 |   0 |  151 |    0 |   177 |   8 |   NULL | 
| 4 | 1412645652 | 1412600400 | 000   |   60.8 |   0 |  104 |    0 |   179 |   9 |   NULL | 
| 5 | 1412647563 | 1409320800 | 804560   |   225.5 |   0 |  18 |    0 |   174 |   10 |   NULL | 

我也是用的DataTable toorganise數據。我正在使用服務器端處理來執行數據查找以返回JSON。

我遇到的問題是,用戶正試圖通過價格eith通過鍵入$123123.50該搜索不工作的SQL被genrated像這樣:SELECT * FROM invoices WHERE invoice_amount LIKE "%$123%";

這obviosuly未能因數據以雙精度存儲在數據庫中。

我的問題是,有沒有辦法讓SQL(或許也許PHP)搜索正確的值,不管客戶端類型是什麼?

回答

1

我不認爲這是對你所面臨的問題的任何通用的解決方案,但是是的,你可以刪除喜歡$等特殊字符從發票金額的開頭或結尾開始放入查詢中。此外,我會建議您儘可能以最佳方式使用,PHP以及MySQL的功能,而不是使用LIKE語句。在這種情況下使用LIKE語句是絕對不正確的。

+0

也許你是正確的,也許我應該在發送之前「清理」查詢服務器(或一旦它在服務器上) –

+0

在執行sql查詢之前,應該刪除「$」。 – WisdmLabs

+0

這是我的解決方案。在將搜索發送到服務器之前,我使用javascript更改了值。刪除'$'並使用'parseFloat()'確保該數字是一個浮點數 –

0

你可以試着查詢,而「$」

SELECT * FROM invoices WHERE invoice_amount LIKE "%123%"; 
+0

謝謝,但問題是,用戶輸入'$ 123'到搜索框中,所以SSP正在搜索用戶輸入的內容 –