2013-03-01 66 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