我有一些字符串值存储在数据库表中,用于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英寸
的所有记录我尝试过使用比较运算符,但未显示正确的结果。它显示起始值或结束值。不是范围之间的那些。
答案 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;
这将允许您在必要时创建和索引并真正加速搜索。但在此之前,您已经将数据标准化了一些。