使用嵌套查询对行进行排序(查询其他查询的结果)
sorting rows with nested queries(querying on results of other query)
我有一个 table 并且想使用嵌套查询对最相关的结果进行排序。
我有 4 列 item_name, color, gender, pattern
和 1 50,000 行
如果我给了项目name:shirt、color:white、gender:female、pattern:solid
我想要 10 个最相关的结果,即使某些属性没有根据属性中的优先级完全匹配
需要获取与项目名称匹配的所有行
然后在上面的结果中获取所有匹配性别的行
然后得到上面结果中所有匹配颜色的行
然后获取上述结果中匹配模式的所有行
最后,如果结果小于 10,那么我们需要显示之前查询的剩余结果
我尝试了以下
select product_type
from product_feeds
WHERE color = 'black'
AND color IN (select color
from product_feeds
WHERE gender = 'female'
AND (gender) IN (SELECT gender
FROM product_feeds
WHERE product_type = 'Jeans & Leggings'
)
)
它不工作。
如果我没理解错的话,你有一个不同列的优先级列表。您可以在每一列上使用 order by
来处理此问题:
select pf.product_type
from product_feeds pf
order by (pf.product_type = 'Jeans & Leggings') desc,
(pf.gender = 'female') desc,
(pf.color = 'black') desc,
(pf.patten = ?) desc
limit 10;
我有一个 table 并且想使用嵌套查询对最相关的结果进行排序。
我有 4 列 item_name, color, gender, pattern
和 1 50,000 行
如果我给了项目name:shirt、color:white、gender:female、pattern:solid
我想要 10 个最相关的结果,即使某些属性没有根据属性中的优先级完全匹配
需要获取与项目名称匹配的所有行
然后在上面的结果中获取所有匹配性别的行
然后得到上面结果中所有匹配颜色的行
然后获取上述结果中匹配模式的所有行
最后,如果结果小于 10,那么我们需要显示之前查询的剩余结果
我尝试了以下
select product_type
from product_feeds
WHERE color = 'black'
AND color IN (select color
from product_feeds
WHERE gender = 'female'
AND (gender) IN (SELECT gender
FROM product_feeds
WHERE product_type = 'Jeans & Leggings'
)
)
它不工作。
如果我没理解错的话,你有一个不同列的优先级列表。您可以在每一列上使用 order by
来处理此问题:
select pf.product_type
from product_feeds pf
order by (pf.product_type = 'Jeans & Leggings') desc,
(pf.gender = 'female') desc,
(pf.color = 'black') desc,
(pf.patten = ?) desc
limit 10;