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 Query .. 任何帮助将不胜感激。

4

5 回答 5

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 回答
0

只需在您的 php.ini 中获取矩形区域即可。

RectArea = width * length;

RectArea在 where 子句中使用。

 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)

这将为您提供大部分的帮助。请注意,它可能会返回多行,因此您可能需要进行一些排序以获得最佳匹配并添加 aLIMIT 1以返回单行。

于 2013-03-01T19:28:52.330 回答
0

这是正确的答案(我认为 xD):

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

萨卢多斯 ;)

于 2013-03-01T19:30:10.747 回答