1

我有一些字符串值存储在数据库表中,用于笔记本电脑的屏幕尺寸,如 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英寸的所有记录

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

4

3 回答 3

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]

于 2012-08-09T12:55:12.813 回答
0

在 MySQL 中,您可以使用BETWEEN比较运算符

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;

这将允许您创建和索引,并在必要时真正加快未来的搜索速度。但在此之前,您已经对数据进行了更多规范化。

于 2012-08-09T12:58:56.447 回答
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;
}
于 2012-08-09T12:52:58.023 回答