2011-05-21 97 views
0

我不知道如何分類這個問題。有趣的是,它關於在使用php腳本執行的mysql查詢的WHERE子句中使用計算值。如何在mysql php中建立動態運行時查詢?

這裏的情景 - 我有一個MySQL表結構是這樣的:table_id的[INT],ITEM_ID [INT],item_rating [INT] 現在item_rating列可以有一個 「1」 或「0 「它的價值。 table_id列設置爲auto_increment,item_id列也可以具有重複值。

因此,一個典型的表看起來像下面 -

table_id item_id item_rating 
1   item1  1 
2   item5  0 
3   item1  1 
4   item1  1 
5   item5  1 
6   item1  0 

什麼我打算做我每個ITEM_ID,我算item_rating數量= 1個item_rating = 0,然後採取item_rating值之差以獲得該項目的最終評分(final_item_rating = item_rating(value = 1) - item_rating(value = 0))。

現在的問題: 我有一個PHP腳本,需要從這些表中的值,然後顯示下令對「final_item_rating」值項目詳細信息 - 這樣的: SELECT * FROM表名ORDER BY final_item_rating遞減

唯一的問題是,由於這個final_item_rating本身不是一個列,而且實際上是基於查詢的運行時值,所以我如何構建一個查詢?

希望我的問題明確:)

回答

2

這種查詢可以幫助您:

SELECT sum(item_rating) AS SumRatings 
FROM table_name 
WHERE item_rating=1 
GROUP BY item_id 
ORDER BY SumRatings; 
+0

問題要求'item_rating(value = 1) - item_rating(value = 0)',但是這個查詢不會計算'value = 0'爲負數 – Andomar 2011-05-21 07:49:57

+0

感謝大家,這真的有幫助! 我做了一些數據庫結構的修改,並用「-1」取代了所有的0,這樣可以一步完成計數/求和。 我使用了由@Pushpendra提供的上述查詢的稍微修改版本;修改後的一個是如下 - 'SELECT t_painting_feedback.painting_id,總和(t_painting_feedback.rating)AS幸福各位 FROM t_painting_feedback WHERE評級(' 1' , '-1') GROUP BY painting_id ORDER BY幸福各位DESC」 – 2011-05-21 11:32:37

0

此查詢將總結收視率,並下令在頂部的最高評級結果:

select item_id 
,  sum(case when item_rating = 1 then 1 else -1 end) as rating 
from YourTable 
group by 
     item_id 
order by 
     sum(case when item_rating = 1 then 1 else -1 end) desc