比较字符串值内的整数
我有一些字符串值存储在数据库表中的14英寸,14.8英寸,15.1英寸,15.6英寸,16英寸等笔记本电脑的屏幕尺寸。利用使用值的范围像一个高级搜索选项正在搜索这些值:比较字符串值内的整数
less than 14 inches
14-15 inches
15-16 inches
16-18 inches
如何使用上面的搜索条件来从数据库中获取的值,以显示我躺在内的所有屏幕尺寸范围:
15-16 inches
返回应该是所有记录15.1英寸的结果,15.6英寸
我一直在使用比较操作,但正确的结果没有显示尝试。它显示起始值或结束值。不在范围之间的人。
比方说14,15,16,18是你的4个选项和$ myvalue的是要他们
尝试比较值:
$range = array(14, 15, 16, 18);
foreach ($range as $key => $val)
{
// first option
if ($myValue <$range[0])
$option = 1;
// last option
else if($myValue > $range[count($range))
$option = count($range)+1;
// other options
else if($myValue < $val && $myValue > $range[$key-1])
$option = $key+1;
}
$str = '15-16 inches';
preg_match_all('!\d+!', $str, $matches);
$matches
将返回为使用以下格式的数组:
array (
0 =>
array (
0 => '15',
1 => '16',
),
)
由此,您可以将数据库结果与$matches[0][0]
和$matches[0][1]
。
'sscanf($ str,'%d-%d inches',$ from,$ to);' - http://de.php.net/sscanf - 直接给你整数。并且它更清楚它的作用;) – hakre 2012-08-09 13:10:31
在MySQL中,你可以使用BETWEEN
comparison operator为:
SELECT * FROM test.inches WHERE text BETWEEN 15 AND 16;
要从范围内得到的所有条目。 BETWEEN
也会将字符串转换为数字。
3 15.1 inches 15.1
4 15.6 inches 15.6
5 16 inches 16
或者到BETWEEN
你可以制定两个标准,并告诉双方都需要进行匹配(AND
):
SELECT * FROM test.inches WHERE text >= 15 AND text < 16;
`-- #1 --´ + `-- #2 -´
这给了你那么:
3 15.1 inches 15.1
4 15.6 inches 15.6
我希望这有助于。
关于转换(将字符串转换为数字在这里):在MySQL(至少我在这里使用的版本,但是这是常见的),你可以将字符串转换为一个数字,然后数值加0比较反对。演示:
SELECT "15.1 inches" + 0 AS inches;
返回单行数;:
15.1
同样可以查询数据库时做到:
SELECT * FROM inches WHERE text + 0 BETWEEN 14 AND 15;
小心你最初应该将数字作为数字存储到数据库中。所以,你可以引入一个新列并转换现有的日期:
ALTER TABLE `test`.`inches` ADD COLUMN `number` FLOAT NULL AFTER `text` ;
UPDATE inches SET number = text + 0;
然后,您可以直接查询从那里没有做转换所有的时间:
SELECT * FROM inches WHERE number BETWEEN 14 AND 15;
这将允许您创建和索引并且如果有必要,真的可以在未来加快搜索速度。但在此之前,您已经将数据标准化了一些。
您需要将字符串中的数字进行正则表达式化,然后进行比较。 – Fluffeh 2012-08-09 12:41:01
或者您可以将单元存储在单独的列中。通过这种方式,您可以通过参考单位来计算它们的长度,而不是单位不可知的值来进行真正的比较。 – Matt 2012-08-09 12:43:08
您的值是作为字符串存储在数据库中还是浮点? – 2012-08-09 12:43:29