الخلية - تحسين استعلام والبحث رتبة على أساس عمود مبلغ

StackOverflow https://stackoverflow.com/questions/800467

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي قاعدة بيانات درجة عالية لعبة التي تتعقب كل لعبة في مجموعة متنوعة من العالم. ما أريد القيام به هو معرفة بعض الإحصاءات عن المسرحيات، ومن ثم تجد فيها كل العالم "صفوف" وفقا لكل العالم الآخر (مرتبة حسب عدد المرات التي لعبت).

وحتى الآن أنا عندي كل ما عندي من الإحصاءات على ما يرام، ولكن لقد واجهت مشكلة في إيجاد ترتيب كل العالم.

وأنا أيضا متأكد من القيام بذلك في ثلاثة استعلامات منفصلة من المحتمل ان يكون بطريقة بطيئة جدا للذهاب نحو ذلك، وربما يمكن تحسينها.

ولدي عمود الطابع الزمني (لا تستخدم هنا) وعمود "العالم" المفهرسة في مخطط DB. وفيما يلي مجموعة مختارة من مصدر بلدي:

function getStast($worldName) {
  // ## First find the number of wins and some other data:
  $query = "SELECT COUNT(*) AS total, 
            AVG(score) AS avgScore, 
            SUM(score) AS totalScore
            FROM highscores 
            WHERE world = '$worldName'
            AND victory = 1";
  $win = $row['total'];

  // ## Then find the number of losses:
  $query = "SELECT COUNT(*) AS total 
            FROM highscores 
            WHERE world = '$worldName'
            AND victory = 0";
  $loss = $row['total'];

  $total = $win + $loss;

  // ## Then find the rank (this is the broken bit):
  $query="SELECT world, count(*) AS total 
          FROM highscores 
          WHERE total > $total
          GROUP BY world
          ORDER BY total DESC";

  $rank = $row['total']+1;
  // ## ... Then output things.
}

وأعتقد أن خط معين من التعليمات البرمجية التي هو الفشل لي هو في الاستعلام RANK،

              WHERE total > $total

هل لا يعمل لأنه لا يمكن أن تقبل ما مجموعه المحسوب كحجة في جملة WHERE؟

وأخيرا، هل هناك طريقة أكثر كفاءة لحساب كل هذا في استعلام SQL واحد؟

هل كانت مفيدة؟

المحلول

وأعتقد أنك قد ترغب في استخدام "وجود الإجمالي> $ مجموعه؟

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top