mysql根据输入查找列中大多数为“ true”的行

时间:2019-01-10 09:13:30

标签: mysql

我有一张桌子,

--------------------------------------------------------------
|id |has_item_1|has_item_2|has_item_3|has_item_4             |
--------------------------------------------------------------
| 54| true      |false        |false        |true
| 63| false     |false        |true         |true
| 12| true      |true         |true         |true
--------------------------------------------------------------

并且用户可以指定他/他想要存在的项目,结果应按匹配的最多项目进行排序。
例如,对于输入has_item_1, has_item_2,它应按12 54 63的顺序返回表
对于查询has_item_3, has_item_4,它应按12, 63, 54的顺序返回表
运行查询
SELECT * FROM table WHERE has_item_1 = true OR has_item_2 = true不会对“最高匹配”的结果进行排序。
有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

这应该起作用,有关FIELD的更多信息,请参见以下文档:https://www.w3schools.com/sql/func_mysql_field.asp

instance_create = {
      'name':
          'instance_create',
      'action':
          'gcp-types/bigtableadmin-v2:bigtableadmin.projects.instances.create',
      'properties': {
          'parent': project_path,
          'instanceId': instance_name,
          'clusters': copy.deepcopy(initial_cluster),
          'instance': context.properties['instance']
      },
      'metadata': {
          'runtimePolicy': ['CREATE']
      }
}

对于第二个查询,如果2行具有相同的“ True”值,则要在12到63之间进行选择,可以按id添加订单:

SELECT * FROM table 
WHERE has_item_1 = 'True'
    OR has_item_2 = 'True'
ORDER BY FIELD(has_item1, 'True', 'False'), FIELD(has_item2, 'True', 'False')

编辑:您甚至可以简化上面的查询,就像它不是FIELD中的值一样,返回值为0。

SELECT * FROM table 
WHERE has_item_3 = 'True'
    OR has_item_4 = 'True'
ORDER BY FIELD(has_item3, 'True', 'False'), FIELD(has_item4, 'True', 'False'), id