我正在使用php/mysql進行搜索。我的表是'高度'和數據類型= varchar(10)其中包含像(5英尺2英寸,5英尺3英寸,等等)。在尋找我的2個值 - height1和身高2其基本範圍。我如何在範圍內搜索該表格?說 - 我會給範圍5英尺1英寸到5英尺10英寸,並希望得到這些值之間的數據。我正在使用php。請幫我解釋一下。謝謝。MySQL搜索幫助
回答
你應該真的像別人說並將其存儲爲一個整數值(英寸),所以5英尺10英寸是70
要顯示它作爲FT /再次,你只是做這樣的事:
$result = 70; //Whatever is retrieved from the DB really, in inches
if($result >= 12) //If result is a foot or more
{
$feet = floor($result/12); //Divide the total inches by 12 and round down
$inches = $result % 12; //Modulus total inches by twelve to get remainder inches
$string = $feet . 'ft ' . $inches . 'in'; //Combine into string
}
else
{
$string = $result . 'in'; //Unless you want it to display 0ft 7in or whatever if less than a foot
}
你可以很容易地轉換所有的值在DB整數用一個簡單的腳本,從數據庫拉數據,拆分英尺和英寸分開,剪掉弦形部分(這可能只要將它們拆分後轉換爲int就可以完成),然後將英尺的數字部分乘以12並將其添加到英寸的數字部分並更新e DB。
會是這個樣子:
$sql = mysql_query("SELECT `id`,`height` FROM `table` WHERE 1");
while($row = mysql_fetch_assoc($sql))
{
$values = explode(" ",$row['height']); //Split it into two parts at the space between feet and inches
$feet = (int)$values[0]; //Could also trim off the last 2 characters in the string
$inches = (int)$values[1];
$total = ($feet * 12) + $inches; //Of course, given order of operations, the parentheses aren't necessary, but makes it look nicer
mysql_query("UPDATE `table` SET `height` = $total WHERE `id` = $row['id']");
}
當然,你想要做的是讓餐桌上的新的空列,以保存新的整數值,像heightint
什麼的,然後將舊列重命名爲其他內容,然後將新列重新命名爲高度。
好的,如果你沒有修改表的能力(你應該真的向你的客戶提出這樣的改進),我認爲你需要做的是查詢是這樣的:
SELECT * FROM `table` WHERE `height` >= '5ft 10in' AND `height` <= '5ft 1in'
但是這樣的一個人說,5英尺10英寸會來5英尺1英寸中的數據類型之前,所以這會是很難找出哪個範圍應該是第一位的,哪些應該放在第二位,如果它是一個任意輸入,甚至不知道如果範圍超出一隻腳的話,它是否會捕獲所有的值。
然後,對它們進行排序的最簡單的方法可能是將高度轉換爲上述的總英寸數,然後使用PHP中的數據進行排序,使用您想要的任何數組排序功能。
我建議你以不同的方式存儲高度值。如果將它作爲浮點(5.1英尺等)或int(63英寸等)存儲,則可以輕鬆比較這些值。包含腳和英寸的字符串將更難以用mysql解析。
例如:
SELECT * FROM height WHERE rowHeight BETWEEN 12 AND 20
沒有解決問題約束 – RichardTheKiwi 2011-02-12 07:30:33
由於您使用VARCHAR()來存儲你的高度數據,高度值存儲爲一個字符串。因此,要獲得一定範圍內的值,您必須先對數據進行排序。但是,由於您使用的是varchar(),因此按字母順序對列進行排序時,5ft 10in的值在5ft 1in之前。
因此,我建議你存儲的腳值和英寸值在2列整數,然後根據兩列,將給予英寸更高的優先級,以腳和較低的優先級排序數據。
然後,同時從結果集閱讀,只需在連接字符串「金融時報」和「在」您的數據。
其實我沒有權限修改表。我正在努力工作。所以我必須在這種情況下做到這一點。任何想法? – 2011-02-12 07:21:40
它使生活變得複雜,但只要是單個數字,您就可以在「英寸」部分添加「0」。考慮到你正在儲存身高,讓我們忽略身高達到10英尺或更高的情況。
的樣本數據
create table height(height varchar(20) collate utf8_general_ci);
insert height select '5ft 10in';
insert height select '6ft 1in';
insert height select '7ft 10in';
insert height select '8ft 1in';
insert height select '6ft 11in';
insert height select '7ft 2in';
Select
聲明
select *
from height
cross join (select '5ft 9in' as low, '7ft 3in' as high) inputs
where
case when height like '%ft _in' then
concat(left(height, instr(height,'ft')+2), '0', right(height,3)) else height end
between
case when low like '%ft _in' then
concat(left(low, instr(low,'ft')+2), '0', right(low,3)) else low end
and
case when high like '%ft _in' then
concat(left(high, instr(high,'ft')+2), '0', right(high,3)) else high end
從本質上說,你插height1和身高2投入這部分
cross join (select '$height1' as low, '$height2' as high) inputs
- 1. mySQL搜索/ MATCH()AGAINST()幫助
- 2. 高級MySQL搜索幫助
- 3. objectdatasource搜索幫助
- 4. Hibernate搜索幫助
- 5. 搜索引擎幫助
- 6. PHP搜索查詢幫助
- 7. 全文搜索幫助
- 8. 搜索treeview幫助請
- 9. 需要幫助AutoCompleteTextView搜索
- 10. 幫助定位搜索欄
- 11. 幫助使用php搜索
- 12. ASP.NET MVC C#搜索幫助
- 13. PHP搜索引擎幫助
- 14. 熱門搜索幫助
- 15. 索引如何幫助在mysql中快速搜索數據
- 16. Rails:將索引幫助範圍搜索?
- 17. 搜索R「幫助」和「重複」循環幫助文件
- 18. 需要關於MySQL搜索查詢的幫助
- 19. 需要幫助添加過濾器到MySQL搜索查詢
- 20. mysql字符串搜索算法查詢幫助
- 21. 幫助用JOIN搜索MYSQL數據庫 - 可能的自動JOIN?
- 22. 幫助!關鍵字在MySql全文搜索中的優先級!
- 23. 需要幫助使用SELECT DISTINCT結果搜索MySQL數據庫
- 24. 谷歌搜索引擎優化幫助
- 25. 需要VB.net幫助搜索查詢?
- 26. 需要幫助實現全文搜索
- 27. 需要幫助搜索鏈接列表
- 28. 使用代碼幫助搜索Perl IDE
- 29. 在哈希表中搜索幫助!
- 30. Excel幫助需要搜索和提取
你真的應該存儲所有的值在單個單元中,然後您可以轉換和格式化用於顯示。 – prodigitalson 2011-02-12 06:28:48
其實我沒有權限修改表格。我正在努力工作。所以我必須在這種情況下做到這一點。任何想法? – 2011-02-12 07:20:45