我在数据库中有足球运动员。他们每个人都有一个排名(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知识有限,但这似乎并不可行。
由于
答案 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;