2015-07-26 3 views
3

У меня есть футболисты в базе данных. У каждого из них рейтинг (1 лучше), и я рассчитываю их возраст на лету в запросе MYSQL. Этот запрос выполняет ORDER BY, используя их рейтинг и их возраст. Поэтому я сначала это ...Можете ли вы сделать if/else логику в инструкции MYSQL?

$rankquerytext="ranking + age"; 

Тогда у меня есть запрос ...

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

Это работает просто отлично. Тем не менее, я хотел бы получить немного более конкретный, чем просто добавить их возраст к их ранжированию. Например, я бы предпочел, чтобы сделать если/другое либо в запросе MySQL как-то, или непосредственно перед ним, такие как ...

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

А потом я хотел бы добавить «$ ageadjustment» к их ранжированию, а не к «возрасту».

Например, при использовании «ранжирования + возраста», если Кальвин Джонсон занял первое место, то его последний показатель ORDER BY равен 30 (1 + 29).

В идеале, используя «ранжирование + $ ageAdjustment», ему будет 9 (1 + 8).

Является ли это выполнимым? Я ограничен в своих знаниях mysql, но это не кажется выполнимым.

Благодаря

+2

[MySQL сазе] (http://www.w3resource.com/mysql/control-flow-functions/case- operator.php) – amdixon

+0

Интересно, если вы даже заглянули в эту игру? https://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if – rjdown

+0

@rjdown вы должны поставить это как ответ !!! Когда они помещали это в MySQL? –

ответ

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; 
Смежные вопросы