满足multipe condtion的Mysql排序

时间:2015-10-23 06:38:28

标签: mysql

请参阅图片中的结果字段 - > 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` = ""
   );

enter image description here

我需要排序,它满足字段dep_fields的更多where子句条件。 (也就是说,按FIND_IN_SET中最匹配的方式排序)

1 个答案:

答案 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(*)来计算匹配数量并按顺序排序。