2015-08-07 2 views
1

Привет Я пытаюсь создать что-то, но я не могу сделать свое общее число отрицательным. Поэтому в основном я получил значения, которые являются отрицательными, которые могут быть умножены на несколько сложное математическое уравнение.PHP/SQL: оператор if в запросе?

По существу ... пользователь вводит данные от -1 до 1. (-1, 0, 1) И это умножается на мою формулу. Так что мой SQL-запрос выглядит следующим образом ... (эта часть работает!)

SELECT *, a, b, c AS TOTALNUMBER FROM MATH 
ORDER BY TOTALNUMBER DESC 

Однако мне нужно общее число всегда будет положительным. Поэтому я пробовал последние несколько часов, чтобы понять это. Я вроде как новичок в php/sql.

Я пытаюсь включить что-то вроде ...

if (TOTALNUMBER < 0) { 
TOTALNUMBER * -1.0 
} 

Однако я понятия не имею, где включить это в запросе или как писать правильно.

Для уточнения и обновления, что я ищу ... Пользователь может ввести -1,0,1

данных для A, B, C является, например. 10, 15, 20 входы пользователей: 1, -1, 0

A total = 10 
B total = -15 
C total = 0 
Total ABC = -5 

Тем не менее, мне нужно всего быть 5 вместо -5 без изменения значения A, B, C.

+1

'WHERE TOTALNUMBER <0'? Я не уверен в 'TOTALNUMBER * -1.0. – Script47

+1

Привет там, totalnumber, если отрицательный должен умножаться с отрицательным 1, чтобы стать положительным, а затем упорядочить по убыванию. – user2515606

+1

@ user2515606 Я не уверен, что это поможет. http://stackoverflow.com/questions/63447/how-to-perform-an-if-then-in-an-sql-select – Script47

ответ

4

использовать как этот

SELECT *, a, b, ABS(c) AS TOTALNUMBER FROM MATH 
ORDER BY TOTALNUMBER DESC 
+1

Нет ли способа сделать мой TOTALNUMBER положительным, чтобы сделать мои отрицательные значения положительными? Я знаю, что это звучит глупо, но это именно то, как моя формула настроена. – user2515606

1

ЕСЛИ (выражение1, выражение2, выражение3)

Если выражение1 ИСТИНА (выражение1 <> 0 и выражение1 <> NULL), то ЕСЛИ() возвращает expr2; в противном случае он возвращает expr3. IF() возвращает числовое или строковое значение, в зависимости от контекста, в котором он используется.

SELECT a, b, c, If (c <0 , c * -1, c) AS TOTALNUMBER FROM MATH 
ORDER BY TOTALNUMBER DESC; 

Если вы хотите, чтобы сумма всех полей, чтобы быть вашим общее количество, если у вас есть поле ID:

SELECT a,b,c,ABS((sum(a)+(b)+(c))) AS TOTALNUMBER FROM MATH 
group by mathid ORDER BY TOTALNUMBER DESC; 

Вот пример:

mysql> select * from math; 
+--------+----------+ 
| idmath | mathcol1 | 
+--------+----------+ 
|  1 |  1 | 
|  2 |  3 | 
|  3 |  -1 | 
|  4 |  -3 | 
+--------+----------+ 
4 rows in set (0.00 sec) 

mysql> SELECT idmath, If (mathcol1 <0 , mathcol1 * -1, mathcol1) AS TOTALNUMBER 
FROM MATH ORDER BY TOTALNUMBER DESC; 
+--------+-------------+ 
| idmath | TOTALNUMBER | 
+--------+-------------+ 
|  2 |   3 | 
|  4 |   3 | 
|  1 |   1 | 
|  3 |   1 | 
+--------+-------------+ 
4 rows in set (0.00 sec) 

mysql> SELECT idmath, mathcol1, If (mathcol1 <0 , mathcol1 * -1, mathcol1) AS TO 
TALNUMBER FROM MATH ORDER BY TOTALNUMBER DESC; 
+--------+----------+-------------+ 
| idmath | mathcol1 | TOTALNUMBER | 
+--------+----------+-------------+ 
|  2 |  3 |   3 | 
|  4 |  -3 |   3 | 
|  1 |  1 |   1 | 
|  3 |  -1 |   1 | 
+--------+----------+-------------+ 
4 rows in set (0.00 sec) 

mysql> SELECT mathcol1,mathcol2,mathcol3, (sum(ABS(mathcol1))+(mathcol2)+(mathco 
    l3)) AS TOTALNUMBER FROM MATH group by idmath ORDER BY TOTALNUMBER DESC; 
    +----------+----------+----------+-------------+ 
    | mathcol1 | mathcol2 | mathcol3 | TOTALNUMBER | 
    +----------+----------+----------+-------------+ 
    |  3 |  2 |  3 |   8 | 
    |  -3 |  2 |  3 |   8 | 
    |  -1 |  2 |  3 |   6 | 
    |  1 |  2 |  3 |   6 | 
    +----------+----------+----------+-------------+ 
    4 rows in set (0.00 sec) 

Вы можете узнать больше здесь, в dev.mysql.

+1

Я пробовал это, но цифры все еще остаются отрицательными. – user2515606

+0

Привет, спасибо за ответ, но, к сожалению, способ, которым моя формула настроена, мне нужно, чтобы b, c были положительными или отрицательными, а totalnumber всегда выводили положительное число. – user2515606

+0

Спасибо за всю помощь, я отредактировал мое сообщение, чтобы узнать, можете ли вы лучше понять мою проблему.Трудно объяснить – user2515606

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