比较字符串值中的整数

时间:2012-08-09 12:39:54

标签: php

我有一些字符串值存储在数据库表中,用于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英寸

的所有记录

我尝试过使用比较运算符,但未显示正确的结果。它显示起始值或结束值。不是范围之间的那些。

3 个答案:

答案 0 :(得分:0)

让我们说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;
}

答案 1 :(得分:0)

$str = '15-16 inches';
preg_match_all('!\d+!', $str, $matches);

$matches将作为数组返回,格式如下:

array (
  0 => 
  array (
    0 => '15',
    1 => '16',
  ),
)

通过此,您可以将数据库结果与$matches[0][0]$matches[0][1]进行比较。

答案 2 :(得分:0)

在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;

这将允许您在必要时创建和索引并真正加速搜索。但在此之前,您已经将数据标准化了一些。