0

私はこのテーブルを持っています:

scanner name | maxwidth | maxlength
====================================
scanner A    | 50       | 100
scanner B    | 60       | 120

私のPHPでは:

$paperW = 70;
$paperL = 55;

結果が返されるようにmysqlクエリを実行する方法:

scanner name
============
scanner B

アイデアは、どのスキャナーが用紙サイズに合うかを見つけることです。用紙の幅は70、長さは55、プリンターBの最大幅は60ですが、用紙の向きをいつでも回転させて、用紙の幅が55、長さが70になり、スキャナーBに適合します。

スキャナーが用紙に適合するかどうかを確認するための擬似コードでは、次のようになります。

if (paperW <= maxWidth && paperL <= maxLength)
 return true
else{
 if (paperW >  maxWidth){
    if (paperW <= maxLength && paperL <= maxWidth)
       return true;
    else
       return false;
 }
 else
  return false;
}

私はそれをMySQLクエリに翻訳する考えがありません。どんな助けでも大歓迎です。

4

5 に答える 5

0

This is the right answer (i think xD) :

SELECT * FROM scanners 
WHERE 
(maxwidth >= paperW and maxlength >= paperL) #First case
or 
(maxwidth >= paperL and maxlength >= paperW) #Rotating paper

Saludos ;)

于 2013-03-01T19:30:10.747 に答える
0

PHPで長方形の領域を取得するだけです。

RectArea = width * length;

RectAreawhere句でinを使用します。

 SELECT 
     SCANNER_NAME,
     MAX_WIDTH,
     MAX_LENGTH,
     (MAX_WIDTH * MAX_LENGTH) PAGE_AREA 
 FROM Scanners
    WHERE (MAX_WIDTH * MAX_LENGTH)  >=  RectArea ;
于 2013-03-01T19:41:37.523 に答える
0
$query = 
 "SELECT FROM scanners 
  WHERE ( maxwidth <= ".(int)$paperW." 
       && maxlength <= ".(int)$paperL)." 
  OR
        ( maxwidth <= ".(int)$paperL." 
       && maxlength <= ".(int)$paperW." )
     ";
于 2013-03-01T19:22:06.887 に答える
0

次のようなwhere句を使用できます。

WHERE (paperW <= maxWidth AND paperL <= maxLength) OR 
      (paperL <= maxWidth AND paperW <= maxLength)

これでほとんどの方法が得られます。複数の行を返す可能性があることに注意してください。そのため、最適な一致を取得するためにいくつかの順序付けを行いLIMIT 1、単一の行を返すためにを追加することをお勧めします。

于 2013-03-01T19:28:52.330 に答える
0

これを試して

 select scanner_name from your_table 
 where ('$paperW' <= maxwidth and $paperL <= maxlength ) 
  OR  ('$paperW' <= maxlength and $paperL <= maxwidth )

デモSQLFIDDLE

于 2013-03-01T19:51:06.250 に答える