我有一张桌子,
--------------------------------------------------------------
|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
不会对“最高匹配”的结果进行排序。
有没有办法做到这一点?
答案 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