我需要在给定一组属性的情况下从mysql表中找到最佳匹配。
例如,给定ATTRIBUTE1,ATTRIBUTE2和ATTRIBUTE3,我想得到如下结果:
到目前为止,我只知道如何完成第一个声明:
SELECT * FROM Users
WHERE ATTRIBUTE1="aValue", ATTRIBUTE2="aValue", ATTRIBUTE3="aValue"
LIMIT 20
N.B。我需要2个清单。具有完全匹配行的列表和具有部分匹配的列表
答案 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