MySQL按匹配列数排序

MySQL按匹配列数排序,mysql,sql-order-by,Mysql,Sql Order By,我正在尝试建立一个学校项目的基本交友网站,我想排序我的结果。用户将输入他们的习惯和偏好,这应该与其他用户的习惯和偏好相匹配。例如,一个用户吸烟,并且正在寻找一个不吸烟并且没有任何反对吸烟的用户 我看过很多例子,但似乎找不到正确的方法来完成这项工作 user table: user_name, etc, user_smokes (boolean), user_record (boolean), etc pref table: smokes (tiny int, for example 1 2 3

我正在尝试建立一个学校项目的基本交友网站,我想排序我的结果。用户将输入他们的习惯和偏好,这应该与其他用户的习惯和偏好相匹配。例如,一个用户吸烟,并且正在寻找一个不吸烟并且没有任何反对吸烟的用户

我看过很多例子,但似乎找不到正确的方法来完成这项工作

user table:
user_name, etc,
user_smokes (boolean),
user_record (boolean), etc

pref table:
smokes (tiny int, for example 1 2 3 for options yes, no dont care )
record (tiny int, for example 1 2 3 for options yes, no dont care )

我认为应该是这样的:
smokes(布尔值或NULL表示“不重要”)
我认为使用
NULL
表示实际值不是一个好主意,比如“不重要”。这不是一个愚蠢的DB,我的意思是smokes可以有3个值,布尔值中设置了yes或no,no pref为null。不知道这方面的最佳实践是什么。测试
null
会使匹配复杂化。最好使用三态变量,一个值表示“不在乎”。许多匹配的网站对每个因素都使用一对变量:一个表示他们有多在乎(一点也不在乎,一点,适中,很多,强制),另一个表示所需的因素。我不必是这么大的问题,这适用于上述两个评论。我要改变三态的值。小整数(1)对吗?例如,0表示否,1表示是,2表示不重要