Recupero record di MySQL sulla base di un insieme variabile di punti di confronto
-
13-09-2019 - |
Domanda
Diciamo che ho una tabella di MySQL, people
. Ogni record comprende una varietà di proprietà, tra questi favourite_colour
, country
e age_group
.
Quello che vorrei fare è recuperare i record da questa tabella per la loro somiglianza con una serie di parametri specifici. Dato "Rosso", "Stati Uniti", e "18-25", ad esempio, i migliori risultati sarebbero i record che hanno tutte e tre. Questi sarebbero corrispondenze al 100%.
Tuttavia, vorrei anche per recuperare i record che corrispondono a qualsiasi combinazione di due parametri (66% delle partite), o qualsiasi parametro (partita il 33%). Inoltre, vorrei poter definire ulteriori punti di confronto (es underwear_type
, marital_status
, ecc.).
C'è una soluzione relativamente efficiente a questo problema?
Soluzione
Sì, è possibile trasformare ogni confronto, come ad esempio favourite_colour='Red'
& C, in un valore di 0 (false) o 1 (vero) - mysql lo farà in modo implicito, ma per la generalità si potrebbe desiderare
CAST( (favourite_colour='Red') AS INTEGER)
ecc; poi, si SUM
tutti questi, cioè.,
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
vi darà partite perfette prima, 2-di-3 successivo; facile da generalizzare ancora di più controlli -!)
Altri suggerimenti
Per i tre prima è facile:
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
Non capisco le "ulteriori punti di confronto" parte, si può spiegare?