如何用mysql获取“部分匹配”?

时间:2011-09-02 10:27:25

标签: mysql

我需要在给定一组属性的情况下从mysql表中找到最佳匹配。

例如,给定ATTRIBUTE1,ATTRIBUTE2和ATTRIBUTE3,我想得到如下结果:

  1. 所有属性匹配的行
  2. 匹配2个属性的行
  3. 匹配1个属性的行
  4. 到目前为止,我只知道如何完成第一个声明:

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

    N.B。我需要2个清单。具有完全匹配行的列表和具有部分匹配的列表

1 个答案:

答案 0 :(得分:1)

您可以考虑在ATTRIBUTE {1..3}

中构建复合索引

这将有利于列表A

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

可能有助于列表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