MySQL sorgusu: liste değeri benzersiz olmadığı kullanılarak sıralanır zaman bir sonraki veya önceki öğeyi almak

0 Cevap php

Ben görüntülerin galeri var. Her görüntü kaç kullanıcının "i like this" olarak dayanan bir derece vardır. MySQL tablo böyle lokes:

id       |image      |rating
------------------------------------
166      |6.png      |9
165      |8.png      |9
189      |1.png      |8
171      |99.png     |8
169      |56.png     |8
155      |34.png     |8
265      |7.png      |7
754      |86.png     |6
166      |37.png     |4
342      |95.png     |2
99       |35.png     |0
76       |34.png     |0
44       |3.png      |0
8        |22.png     |0

Görev: mümkün puanı olanlar galerisini görmek için yapmak. Bu ORDER BY rating DESC, id DESC kullanarak görüntüleri listelemek kolay ama sorun kullanıcı bir görüntüye clickes ve ben açtı resminin yanındaki "Önceki görüntü" ve "Sonraki Resim" düğmelerini göstermek gerektiğinde çıkıyor.

Şimdi örnek tablodan id = 169 ile görüntü bakıyor varsayalım:

id       |image      |rating
------------------------------------
169      |99.png     |8

Nasıl önceki görüntüyü (id = 171) almak için, benim sorgu yazabilirim? Sorun birincil sipariş rating tarafından (tek değil) ve ikincil benzersiz id tarafından olmasıdır. Herhangi bir durumda bana doğru önceki görüntüyü verecek sorgu.

Ben denedim:

SELECT *
FROM images
WHERE rating >= 8 AND id >=169
ORDER BY rating, id
LIMIT 1

id >=169 kontrol edilmelidir, çünkü ancak bu derece aynı ise, yapmaz.

Biraz kafam karıştı, lütfen bana yardım et.

UPDATE

Başıma bu bir düşündüm. Ben rating ve geçerli kayıt için id değerlerine sahip olduğunu varsayarsak, önceki rekorunu almak için sorgu olacaktır:

SELECT *
FROM `images`
WHERE 
    (`rating` = 8 AND `id` > 169)
    OR `rating` > 8
ORDER BY `rating`, `id`
LIMIT 1

rating = 8 AND id > 169 değerlendirilir değilse, o zaman rating > 8 devreye gider. Oldukça basit dışarı çıktı.

Herkes teşekkürler! Çoğu upvotes ile cevap kabul.

0 Cevap