Tablodaki bir satır konumunu Hesaplanması

3 Cevap php

Diyelim ki böyle bir tablo var diyelim (bu sadece basitleştirilmiş bir örnektir, ben bahsediyorum gerçek tablo çok daha karmaşıktır):

CREATE TABLE media (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
voted INT NOT NULL DEFAULT 0,
rating FLOAT NOT NULL DEFAULT 0
) ENGINE = INNODB;

voted sütun öğe alınan oy bir sayıyı temsil eder ve rating sütun öğenin toplam notunu gösterir.

Şimdi, ne yapmak istiyorum id gibi bir şey dayalı tablodan tek bir öğe seçmek olduğunu:

SELECT m.* FROM media AS m WHERE id = 5;

Ama buna ek olarak, ben rating sütuna dayanan bu satırın konumunu hesaplamak ve ek bir sütun olarak, yani büyük satır derece yüksektir (bir site_rank denilen diyelim ki almak istiyorum Onun site_rank I) Ben de bunu izah umut olacak. Benim tahminim bu subselect sorgu ile elde edilebilir ama bunu nasıl emin değilim.

Herhangi bir yardım?

3 Cevap

Çoğu için bu irade çıkış yüksek rank medya olarak.

Eğer çok oy düşük rütbe istiyorsanız (gibi, en çok oy rank gets 1), sadece alt sorgu işaretini ters.

SELECT  mo.*,
        (
        SELECT  COUNT(*)
        FROM    media mi
        WHERE   (mi.rating, mi.id) <= (mo.rating, mo.id)
        ) AS rank
FROM    media mo
WHERE   mo.id = 5
SELECT
    m1.*,
    (SELECT COUNT(*) FROM media AS m2 WHERE m2.rating > m1.rating) AS site_rank
FROM
    media AS m1
WHERE
    id = 5;

Orada eşit derece ile öğeleri olabilir ve onlar aynı site rütbe rapor edecek, çünkü bu tam bir sıralama tanımlamak unutmayın.

MySQL standart SQL rank () fonksiyonu destekliyor mu? Bu tam olarak ne istediğinizi yapar.

select
  *,
  rank() over (
    order by rating desc
  ) as site_rank
from media