2012-02-29 9 views
0

Я использую PHP и у меня есть следующие две таблицы:Математические операции на нескольких таблицах

REVIEWS 

| id | Item | editor_rating | user_votes | 
------------------------------------------------ 
| 1 | item_1 |  18.1  |  415 | 
| 2 | item_2 |  17.1  |  371 | 
| 3 | item_3 |  14.7  |  111 | 

| 8 | item_8 |  15.3  |  215 | 
| 9 | item_9 |  17.7  |  119 | 
| 10 | item_10 |  17.0  |  66  | 


FILTERS 

| id | Item | published | 
---------------------------------- 
| 1 | item_1 |  1  | 
| 2 | item_2 |  1  | 
| 3 | item_3 |  1  | 

| 8 | item_8 |  1  | 
| 9 | item_9 |  1  | 
| 10 | item_10 |  1  | 

Следующий запрос работает правильно и возвращает все строки:

SELECT * FROM reviews AS r 
JOIN filters AS f ON (r.id = f.id) 
WHERE f.published = 1 

Так что я на правильном пути. Теперь я хотел бы сделать некоторые математические операции над записями. Например, сумма поля editor_rating и user_votes и список строк, упорядоченных по DESC. Я попытался следующие, но она возвращает uncorrect результаты (не ошибки MySQL, ошибка суммы):

SELECT *, r.editor_rating+r.user_votes AS total FROM reviews AS r 
JOIN filters AS f ON (r.id = f.id) 
WHERE f.published = 1 ORDER BY total DESC 

В таблицах выше содержит фактические данные дБ. Суммируя editor_rating и user_votes Я должен был список упорядочен следующим образом:

18.1 + 415 = 433.1 = Item_1 
17.1 + 371 = 388.1 = Item_2 
15.3 + 215 = 230.3 = Item_8 

вместо этого я получаю следующий список:

Item_8 
Item_9 
Item_10 
+2

Пожалуйста, не пишите теги в названиях и благодарите нас, только сообщая об этом сообществу. –

+1

запрос выглядит нормально. каковы исходные данные и ожидаемые результаты .. и что вы получили? – Randy

+0

@Randy - я отредактировал мое сообщение – Nicero

ответ

0

Сначала проверьте, если эти значения является VARCHAR, то вы должны бросить его первым:

SELECT *, cast(r.editor_rating as unsigned)+ cast(r.user_rating as unsigned) AS total FROM reviews AS r JOIN filters AS f ON (r.id = f.id) WHERE f.published = 1 ORDER BY total DESC 

Он запускается для меня, когда я бросаю его сначала без знака integer ..

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