请参阅图片中的结果字段 - > dep_fields。
具有值 11,29 的dep_fields应首先满足多条件FIND_IN_SET(11,dep_fields
),FIND_IN_SET(29,dep_fields
)
和
29 按二阶顺序只满足一个条件FIND_IN_SET(29,dep_fields
)。
我需要排序,它满足字段dep_fields的更多where子句条件。
SELECT * FROM mascot_question
WHERE `dependent` = 8
AND (
FIND_IN_SET(11,`dep_fields`)
OR FIND_IN_SET(14,`dep_fields`)
OR FIND_IN_SET(16,`dep_fields`)
OR FIND_IN_SET(26,`dep_fields`)
OR FIND_IN_SET(29,`dep_fields`)
OR `dep_fields` = ""
);
我需要排序,它满足字段dep_fields的更多where子句条件。 (也就是说,按FIND_IN_SET中最匹配的方式排序)
答案 0 :(得分:4)
您可以使用:
ORDER BY
IF(FIND_IN_SET(11,`dep_fields`), 1, 0)
+ IF(FIND_IN_SET(14,`dep_fields`), 1, 0)
+ IF(FIND_IN_SET(16,`dep_fields`), 1, 0)
+ IF(FIND_IN_SET(26,`dep_fields`), 1, 0)
+ IF(FIND_IN_SET(29,`dep_fields`), 1, 0) DESC
这将为每场比赛添加1
,并按总数排序。
您还应该重新考虑在表格字段中使用以逗号分隔的列表。使用多对多关系表对此进行标准化会更好。这样可以更有效地匹配字段(FIND_IN_SET
无法使用索引),您可以使用COUNT(*)
来计算匹配数量并按顺序排序。