Öğeleri gruplamak için bir etiketleme sistemi kullanıyorum. Temel olarak bir öğeye belirli etiketler ekliyorum ve daha sonra, etiketlerin bazılarını veya tümünü içeren diğer öğeler için veri tabanını arayarak ve sonuçlara her öğe için maksimum etiket sayısıyla sipariş vererek, ona benzer öğeler bulabilirim. . İşte bazı sahte kod:ile ilgili diğer öğeleri maks. benzer etiketler
product: id, name, description
tags: id, name
product_tags: id, product_id, tag_id
map = new Map<int product_id, int occurances>
loop product_tags.where(tag_id: [1,2,3]) as |ptag|
map[ptag.product_id]++
end
sort map by max occurrences
return map.top(6)
Sorum şu; Bu görevi yürütmek için tek bir mysql sorgusunu nasıl oluşturabilirim? Bunu başarmanın alternatif yöntemlerine de açığım.
Hi ve taşma yığını hoş geldiniz: Eğer ürünler gerekiyorsa
Sonra böyle bir şey yapabilirsiniz. Burada önce kendinize gitmenizi ve neler olduğunu görmenizi bekliyoruz. Belkide zaten var. Çeşitli SQL sorgularını denediğinizde ne oldu? Sonuçtan neden memnun değildiniz? Neden zaten bildiğiniz tüm parçaları yaparak işe başlamıyorsunuz ve sonra zor kısımlara gidiniz ... sonra bize takılı olduğunuz parçalarla geri dönün ve bize gösterebilirsiniz. sonuçlar ne elde edeceğiniz ve neyi beklediğiniz ile karşılaştırıyorsunuz :) –
Şu anda bunu nasıl yaptığımı gösteren sahte kod sağladım. Benim yöntemim veritabanında yerine sunucu üzerinde sıralama yaptığı gibi oldukça etkisizdir. – user3642563
Korkarım ki, sahte koddaki gerçek hataları ayıklamak gerçekten zor ... kodunuzun sözlü açıklamasında hata ayıklamaya çalışmak gibi. SQL'i gerçekten denediyseniz, lütfen SQL'i buraya ekleyin (sorunuzu düzenleyin ve yorumlarda biçimlendirme yapmak korkunç olduğu için ekleyin). O zaman sana yardım etmeye başlayabiliriz :) –