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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top