4

私は2つのテーブルを持っています。アップローダ - ID、名前、アイコン、ビュー ビデオ - ID、アップローダ、ビデオ、ビュー

アップローダー列は、動画のアップローダーへの参照として使用されます。そのため、sum() 関数を使用して、各ユーザーが自分のすべての動画から合計で何回視聴したかを数えることができます。これらのユーザーを降順合計ビューで並べ替えたいと思います。

どうすればいいですか?私がこれまでに持っているもののコードはこちらです...

//Retrieve data from the database
$fkbar = mysql_query("SELECT * FROM freaks");
while($fkrow = mysql_fetch_array($fkbar))

//Echo Theme Template on pages  
{   
    $frkid = $fkrow['id'];
    $viewq = mysql_query("SELECT SUM(views) AS vw FROM videos WHERE ref1='{$frkid}' OR ref2='{$frkid}' OR ref3='{$frkid}'");
    while($viewcnt = mysql_fetch_array($viewq))
    {       

        $viewcount = $viewcnt['vw'];

            echo "<div class='diva' id='{$viewcount}'>";
            echo "<div class='inner-diva'><a href='/mobile/freaks/?i={$fkrow['id']}'>";
            echo "<img id='{$fkrow['id']}' class='dvBarIco' src='/assets/ico/{$fkrow['icon']}' height='80px'></a></div>";
            echo "</div>";
    }
}
4

2 に答える 2

1

ORDER BY集計を使用して句を追加するだけです。

ORDER BY SUM(views) DESC

あなたのコメントから、最初にサブクエリを使用して順序付けを行うことができます。

SELECT *
FROM freaks f
ORDER BY (SELECT SUM(views) FROM videos WHERE ref1=f.id OR ref2=f.id OR ref3=f.id) DESC

結合でこれを行うこともできますが、OR複雑になる可能性があります。

SELECT f.*, COALESCE(v.views, 0) total_views
FROM freaks f
LEFT OUTER JOIN (
    SELECT SUM(views) views, id
    FROM (
        SELECT views, ref1 AS id
        FROM videos
        UNION ALL
        SELECT views, ref2 AS id
        FROM videos
        UNION ALL
        SELECT views, ref3 AS id
        FROM videos
    ) x
    GROUP BY id
) v ON f.id = v.id
ORDER BY total_views DESC
于 2013-10-11T03:18:46.380 に答える
1

サブセレクトを使用して合計を取得してみてください。これにより、両方のクエリが組み合わされ、毎回 2 番目のクエリではなく、両方のテーブルで順序付けするオプションが提供されます。

$fkbar = mysql_query(
"SELECT 
    (SELECT SUM(views) AS vw FROM videos WHERE videos.ref1=freaks.id OR videos.ref2=freaks.id OR videos.ref3=freaks.id) as total_views, 
* FROM freaks ORDER BY total_views DESC");
于 2013-10-11T03:22:16.867 に答える