我的数据库中有足球运动员。他们每个人都有一个排名(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;
}
然后我想在他们的排名中添加“$ageadjustment”,而不是“age”。
例如,当使用“排名 + 年龄”时,如果 Calvin Johnson 排名第一,那么他最终的 ORDER BY 数字是 30 (1 + 29)。
理想情况下,使用“ranking + $ageadjustment”,他应该是 9 (1 + 8)。
这可行吗?我的 mysql 知识有限,但这似乎不可行。
谢谢
最佳答案
您可以使用 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;
关于php - 你能在MYSQL语句中做if/else逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633193/