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

BETWEENMySQL では、比較演算子を使用できます。

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

または、BETWEEN2 つの基準を定式化して、両方が一致する必要があることを伝えることもできます ( 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
$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

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 に答える