你能在MYSQL语句中做if / else逻辑吗?

时间:2015-07-26 02:56:03

标签: php mysql

我在数据库中有足球运动员。他们每个人都有一个排名(1是最好的),我在MYSQL查询中即时计算他们的年龄。该查询使用他们的排名加上他们的年龄进行ORDER BY。所以我首先要这个...

$rankquerytext="ranking + age";

然后我有了查询...

$sql = "SELECT *, FLOOR(DATEDIFF(CURDATE(), born) / 365.25) AS age 
    FROM players
    ORDER BY " . $rankquerytext . "";

这很好用。但是,我想更具体一点,而不仅仅是将他们的年龄添加到他们的排名中。例如,我更喜欢在MySQL查询中以某种方式或者在它之前做一个if / else,例如......

if (age < 25) {
$ageadjustment=-5;
} else if (age >= 29) {
$ageadjustment= 8;
} else {
$ageadjustment=0;
}

然后我想添加&#34; $ ageadjustment&#34;他们的排名,而不是&#34;年龄&#34;。

例如,当使用&#34;排名+年龄&#34;时,如果Calvin Johnson排名第一,那么他的最终ORDER BY数字是30(1 + 29)。

理想情况下,使用&#34;排名+ $ ageadjustment&#34;,他将是9(1 + 8)。

这可行吗?我的mysql知识有限,但这似乎并不可行。

由于

1 个答案:

答案 0 :(得分:2)

您可以使用CASE运算符,如下所示:

$rankquerytext = "ranking + adj";

$sql = "SELECT *,
 CASE WHEN FLOOR(DATEDIFF(CURDATE(), born) / 365.25) < 25 THEN -5 
 WHEN FLOOR(DATEDIFF(CURDATE(), born) / 365.25) >= 29 THEN 8
 ELSE 0 
 END AS adj 
 ORDER BY " . $rankquerytext;