Ben tam bir sorgu çalıştırmadan bir kaydın önceki ve sonraki kayıtları almak için en iyi yolu arıyorum. Ben yerde tam uygulanan çözüm var, ve orada bu dışarı yapmak için daha iyi bir yaklaşım olup olmadığını bilmek istiyorum.
Adlı bir hayali manav için bir web sitesi inşa ediyoruz diyelim. Onun HTML sayfalarına ek olarak, her hafta, onun sitesinde özel teklifler listesini yayımlamak istiyor. O, bu teklifler gerçek bir veritabanı tablosunda ikamet istiyor ve kullanıcılar üç şekilde teklifleri sıralamak mümkün olmalıdır.
Her madde de teklif daha, metinsel bilgi ve "önceki" ve "sonraki" düğmeleri ile bir detay sayfasına sahip olması gerekir. "Önceki" ve "sonraki" butonları komşu girişleri depending on the sorting the user had chosen for the list işaret etmek gerekir.
Açıkçası, "Domates, Sınıf I" için "next" düğmesine ilk örnekte "Elmalar, 1. sınıf", "Armut, sınıf I" ikinci ve üçüncü hiçbiri olmak zorundadır.
Ayrıntı görünümünde görev sadece bilgi olarak listenin sıralama düzeni (Şimdi bunu bir GET parametresi ile ?sort=offeroftheweek_price
olsun diyelim ve güvenlik etkilerini görmezden ile, to determine the next and previous items without running a query every time olduğunu .)
Açıkçası, sadece bir parametre olarak bir sonraki ve bir önceki elemanlarının kimliklerini geçen akla gelen ilk çözümdür. Sonuçta, biz zaten bu noktada kimliklerini biliyoruz. Ama, bu burada bir seçenek değildir - bu benim gerçek dünyada kullanımı pek çok olayda bu basitleştirilmiş örnekte iş, ama olmaz.
Benim CMS Geçerli Benim yaklaşım ben "sıralama cache" adında bir şey kullanıyor. Bir liste yüklendiğinde, ben sortingcache
adında bir tablodaki kayıtların içinde öğe pozisyonları saklayın.
name (VARCHAR) items (TEXT)
offeroftheweek_unsorted Lettuce; Tomatoes; Apples I; Apples II; Pears
offeroftheweek_price Tomatoes;Pears;Apples I; Apples II; Lettuce
offeroftheweek_class_asc Apples II;Lettuce;Apples;Pears;Tomatoes
Açıkçası, items
sütun gerçekten sayısal kimlikleri ile doldurulur.
Detay sayfasında, ben şimdi, uygun sortingcache
kaydına erişmek items
sütunu alıp, patlayabilir, geçerli öğe kimlik aramak, ve önceki ve sonraki komşusu dönün.
array("current" => "Tomatoes",
"next" => "Pears",
"previous" => null
);
Bu, besbelli pahalı sadece kayıtları sınırlı sayıda için çalışıyor ve gereksiz verileri oluşturur, ama gerçek dünyada, listeleri oluşturmak için sorgu her ayrıntı görünümünde çalışan, (o) çok pahalı dışında olduğunu varsayalım soru ve some önbelleğe gereklidir.
My questions:
Bu sorgu emir değişen için komşu kayıtları bulmak için iyi bir uygulama olduğunu düşünüyor musunuz?
Performans ve basitlik açısından daha iyi uygulamaları biliyor musunuz? Bu tamamen demode kılan bir şey biliyor musunuz?
Programlama Teorik olarak, bu sorun için bir isim var mı?
Adı "önbelleğini Sınıflandırma" bu teknik için uygun ve anlaşılır?
Bu sorunu çözmek için herhangi bir kabul, ortak desenler var mı? Ne denir?
Note: Benim soru listesi oluşturma hakkında değil, ya da ayrıntı görünümü görüntülemek için nasıl. Bunlar sadece örnekler. Benim sorum bir re-sorgu imkansız olduğu zaman bir kaydın komşularını belirleme basic functionality, ve oraya en hızlı ve en ucuz yoludur.
Şey belirsiz ise, bir yorum bırakın ve ben açıklamak lütfen.
Bir lütuf Başlangıç - belki orada bu konuda biraz daha bilgi var.