2017-07-04 17 views
1
 RATING 
[ id - pid = rate] 
[ 1 - 1 - 5 ] 
[ 2 - 1 - 5 ] 
[ 3 - 1 - 4 ] 
[ 4 - 1 - 1 ] 
[ 5 - 1 - 1 ] 

WHERE pid = 1; 
$r5 = 10; 
$r4 = 4; 
$r3 = 0; 
$r2 = 0; 
$r1 = 2; 
$tt = 16; 

私はどのように私は内側に行うことができ、代わりに配列にすべての値を呼び出し、それを計算する。この数式5点の評価式

($r5*5 + $r4*4 + $r3*3 + $r2*2 + $r1)/$tt 

を作成しようとしていますクエリ自体?実際にはどちらが速く、ウェブサイトにとって最も効率的ですか?

+0

それは何ですか。 SQLテーブルは*順序付けられていない*集合を表しているので、あなたの質問にはその質問に答えるのに十分な情報がありません。 –

+0

@ GordonLinoffだから私は* xの定数を識別する方法がないので、SQLを使って行うことは不可能ですか? –

+0

一意のIDを含むように質問を修正した後、明らかに可能です。 –

答えて

2

次のソリューションを使用することができます:あなたはTRUNCATEを使用することができ、結果を丸めずに、あなたの出力をフォーマットするには

SELECT pid, 
    (((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) + 
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) + 
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) + 
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) + 
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1))/SUM(rate)) AS c_rate 
FROM table_name 
WHERE pid = 1 
GROUP BY pid 

を。結果を丸めて切り捨てる場合は、ROUNDを使用することもできます。

TRUNCATE使用したソリューション:

SELECT pid, 
    TRUNCATE((((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) + 
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) + 
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) + 
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) + 
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1))/SUM(rate)), 1) AS c_rate 
FROM table_name 
WHERE pid = 1 
GROUP BY pid 

ROUND使用したソリューション:あなたの式は値があなたがwhich-識別する方法を持っていることを何らかの方法で注文したりしていることを示唆している

SELECT pid, 
    ROUND((((SUM(CASE WHEN rate = 5 THEN 5 ELSE 0 END) * 5) + 
    (SUM(CASE WHEN rate = 4 THEN 4 ELSE 0 END) * 4) + 
    (SUM(CASE WHEN rate = 3 THEN 3 ELSE 0 END) * 3) + 
    (SUM(CASE WHEN rate = 2 THEN 2 ELSE 0 END) * 2) + 
    (SUM(CASE WHEN rate = 1 THEN 1 ELSE 0 END) * 1))/SUM(rate)), 1) AS c_rate 
FROM table_name 
WHERE pid = 1 
GROUP BY pid 
+0

私は '(formula)AS rate'で式全体をラップしましたが、' echo $ row ['rate'];を実行した場合の例として示した表の場合、 '' 4.25'ではなく '1.0000'私はそれを間違ってラップしましたか? –

+0

はうまく見えます(私のアップデートも参照してください)。あなたのテーブルに存在しない別の名前を試してみてください... –

+0

まだ同じ問題ですが、私は実際に文字と単語を使用している私の 'pid'のいくつかを持っています。 'WHERE id = title-post'のように –