2013-03-01 69 views
0

我有这个表:如何做到这一点的多个IF语句在MySQL

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; 
} 

我不知道到transalte是到MySQL查询..任何帮助,将不胜感激。

+0

[你尝试过什么(http://whathaveyoutried.com)?你看过“WHERE”语句吗? – UnholyRanger 2013-03-01 19:19:56

回答

0

刚刚得到的矩形区域在你的PHP。

RectArea = width * length; 

并在where子句中使用RectArea

SELECT 
    SCANNER_NAME, 
    MAX_WIDTH, 
    MAX_LENGTH, 
    (MAX_WIDTH * MAX_LENGTH) PAGE_AREA 
FROM Scanners 
    WHERE (MAX_WIDTH * MAX_LENGTH) >= RectArea ; 
+0

非常感谢!区似乎解决了这个问题.. – 2013-03-01 20:40:08

0
$query = 
"SELECT FROM scanners 
    WHERE (maxwidth <= ".(int)$paperW." 
     && maxlength <= ".(int)$paperL)." 
    OR 
     (maxwidth <= ".(int)$paperL." 
     && maxlength <= ".(int)$paperW.") 
    "; 
0

您可以使用where子句类似于:

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

这将让你最方式。请注意,它可能会返回多行,因此您可能需要执行一些命令以获得最佳匹配,并添加一个LIMIT 1以返回单个行。

0

这是正确的答案(我想XD):

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

Saludos;)

0

试试这个

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

DEMO SQLFIDDLE