Karşılaştırma noktaları değişken bir dizi dayalı alınıyor MySQL kayıtları

2 Cevap php

Diyelim ki bir MySQL tablo var, people diyelim. Her kayıt, bu favourite_colour arasındaki özelliklerin çeşitli, country ve age_group içerir.

Ne yapmak istiyorsunuz özgü parametreleri kümesi kendi benzerlik bu tablodaki kayıtları almak olduğunu. "Kırmızı", "Amerika Birleşik Devletleri" ve "18-25" verilir, örneğin, en iyi sonuçları tüm üç maç olanların kayıtları olacaktır. Bu% 100 maçlar olacaktır.

Ancak, ben de iki parametre (% 66 maç), ya da herhangi bir parametreye (% 33 maç) herhangi bir kombinasyonu eşleşen kayıtları almak istiyorum. Ayrıca, ben karşılaştırma (örneğin, underwear_type, marital_status, vb) ek puan tanımlamak mümkün olmak istiyorum.

Bu sorun için nispeten etkili bir çözüm var mı?

2 Cevap

Yes, you can turn each comparison, such as favourite_colour='Red' &c, into a value of 0 (false) or 1 (true) -- mysql will do it implicitly, but for generality you might want CAST( (favourite_colour='Red') AS INTEGER) &c; then, you SUM all of these, i.e.,

SELECT
userId,
SUM( (favourite_colour='Red'),
     (country='US'),
     (age_group='18-25') ) AS match_score
FROM people
WHERE match_score >= 2
ORDER BY match_score DESC

Size mükemmel eşleşmeleri verecek ilk, 2-of-3 sonraki; daha çek için genelleme yapmak kolay -!)

İlk üç kolay için:

select * from people
where
(case when color = 'Red' then 33 else 0 end + 
case when age_group = '18-25' then 33 else 0 end + 
case when country = 'United States' then 33 else 0 end)>=33

Ben parçası "karşılaştırma ek puan" anlamıyorum, sen açıklayabilir?