MYSQL查找包含大量列匹配的结果

时间:2017-11-16 11:02:55

标签: mysql sql

是否有一种查询表格的好方法(提供多列的值),首先按最佳匹配排序结果?

表格如下所示:

cat id | feature a | feature b | feature c
1      | NULL      | 1         | 2
2      | 1         | 2         | NULL
3      | 3         | 1         | 3

假设我的特征a / b / c的值为1/2/3,并且我正在寻找最接近的匹配,我希望结果能够超过类别2,因为它具有最多匹配。< / p>

我能找到最近的答案,但由于某些原因它不起作用: MySQL matching 2 out of 5 fields

这是一个类似的问题,但答案是针对Oracle的: SQL - Return rows with most column matches

以下是我的完整查询:

$query_string = "SELECT cat_id FROM categories ORDER BY (";
if ($head_type > 0) { $string_array[] = "(cat_code_head_type = " . (int)$head_type . ")"; }
if ($material > 0) { $string_array[] = "(cat_code_material = " . (int)$material . ")"; }
if ($finish > 0) { $string_array[] = "(cat_code_finish = " . (int)$finish . ")"; }
if ($recess > 0) { $string_array[] = "(cat_code_recess = " . (int)$recess . ")"; }
if ($thread > 0) { $string_array[] = "(cat_code_thread = " . (int)$thread . ")"; }
$query_string .= implode(" + ", $string_array);
$query_string .= ") DESC";

这样结束:

SELECT * 
FROM categories 
ORDER BY ((cat_code_head_type = ?) + (cat_code_material = ?) + (cat_code_finish = ?) + (cat_code_recess = ?) + (cat_code_thread = ?)) DESC

我甚至不确定你是否可以通过添加匹配的表达式来订购?

0 个答案:

没有答案