2017-01-09 3 views
0

Как добавить значения в запрос выбора? Например, в моем коде ниже у меня 5 золотых, 2 серебра и 1 бронза. 1 золото равно 3 пунктам, а 1 серебро - 2 балла. Мой вопрос в том, как я могу вычислить для этого в запросе select? Является ли это возможным?Добавить значения в select query в php

Вот мой скрипт

$sql = "SELECT team.shortcut, 
      SUM(IF(rank = 1, 1, 0)) AS gold, 
      SUM(IF(rank = 2, 1, 0)) AS silver, 
      SUM(IF(rank = 3, 1, 0)) AS bronze 
     FROM team 
      INNER JOIN academicorg ON team.shortcut = academicorg.shortcut 
     GROUP BY shortcut 
     ORDER BY gold DESC, silver DESC, bronze DESC";       

$con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$db_name); 

$result = mysqli_query($con,$sql); 
$response = array(); 
while($row=mysqli_fetch_array($result)) 
{ 
    array_push($response, array("shortcut"=>$row[0], "gold"=>$row[1], "silver"=>$row[2], "bronze"=>$row[3], "total"=>$row[4])); 
} 

echo json_encode (array("news_response"=>$response)); 
mysqli_close($con); 
?> 

Вот что я получаю

{"news_response":[{"shortcut":"aaa","gold":"6","silver":"3","bronze":"5","total":null}, 

{"shortcut":"bbb","gold":"6","silver":"3","bronze":"4","total":null} 

Вот что я хочу. Я получил в общей сложности 29, потому что золото равно 3 балла и серебро 2 и бронза 1.

{"news_response":[{"shortcut":"aaa","gold":"6","silver":"3","bronze":"5","total"29}, 

{"shortcut":"bbb","gold":"6","silver":"3","bronze":"4","total":28} 
+2

Не понимаю. Что ты хочешь делать? – malutki5200

+0

Я думаю, вам придется обернуть выбор внутри другого выбора. Возможно, было бы проще просто выполнить математику внутри цикла while. – aynber

+0

Показать ваши данные и показать желаемые результаты – RiggsFolly

ответ

1

Я был бы соблазн попробовать это. Его не тестировали. У меня нет базы данных, которая соответствует требованиям.

SELECT team.shortcut, 
    SUM(IF(rank = 1, 1, 0)) AS gold, 
    SUM(IF(rank = 2, 1, 0)) AS silver, 
    SUM(IF(rank = 3, 1, 0)) AS bronze, 
    SUM(IF(rank = 1, 3, IF(rank = 2, 2, IF(rank = 3, 1, 0)))) as total 
FROM team 
    INNER JOIN academicorg ON team.shortcut = academicorg.shortcut 
GROUP BY shortcut 
ORDER BY gold DESC, silver DESC, bronze DESC 
+0

Работы. Спасибо человеку – orange

+0

Или просто SUM (ранг = 1) ... – Strawberry

+0

@Strawberry Это могло бы сработать, кроме сохраненного в запасе золота с рангами 1 и бронзы с рангом 3. Поэтому я не думаю, что это сработало – RiggsFolly

Смежные вопросы