2011-09-02 3 views
0

J'ai besoin de trouver les meilleures correspondances d'une table mysql en fonction d'un ensemble d'attributs.Comment puis-je récupérer des "correspondances partielles" avec mysql?

Par exemple, étant donné attribut1, Attribut2 et Attribute3, je veux obtenir les résultats comme suit:

  1. lignes avec tous les attributs correspondent
  2. lignes avec 2 attributs appariés
  3. lignes avec 1 attribut apparié

jusqu'à présent, je ne sais comment accomplir la première déclaration:

SELECT * FROM Users 
WHERE ATTRIBUTE1="aValue", ATTRIBUTE2="aValue", ATTRIBUTE3="aValue" 
LIMIT 20 

N.B. J'ai besoin de 2 listes. Une liste avec des lignes entièrement correspondant et une liste avec des correspondances partielles

Répondre

1

vous pouvez envisager de construire un indice composite ATTRIBUT {1..3}

Cela avantages pour Liste A

SELECT * 
FROM Users 
WHERE ATTRIBUTE1="aValue" AND ATTRIBUTE2="aValue" AND ATTRIBUTE3="aValue" 
LIMIT 20 

et pourrait aider à une ligne dans la liste B

SELECT *, 
IF (ATTRIBUTE1="aValue", 1, 0) as a1, 
IF (ATTRIBUTE2="aValue", 1, 0) as a2, 
IF (ATTRIBUTE3="aValue", 1, 0) as a3 
FROM Users 
WHERE ATTRIBUTE1="aValue" OR ATTRIBUTE2="aValue" OR ATTRIBUTE3="aValue" 
ORDER BY (a1+a2+a3) DESC 
LIMIT 20 
+0

Je ne vais pas avoir un énorme ensemble de données .. probablement Hund des rouges de rangées .. mais ça pourrait être des milliers. Quelle serait une bonne solution alors? Et pourquoi me suggérez-vous une solution donnant de très mauvaises performances? – aneuryzm

+0

la performance est sur le 'OU' – ajreal

+0

mhm, Yat-il un moyen d'obtenir 2 liste de résultats distincts. Une première liste avec les utilisateurs répondant à toutes les exigences et une deuxième liste avec des correspondances partielles? – aneuryzm

Questions connexes