我有一个数据库表(下面的架构):
Items
------
ItemId
UserId
FullURL
我想根据两个标准从中选择一行:
在完整网址字段中具有给定的部分网址或给定的域名,但优先考虑部分网址。
同样,为给定的UserId确定优先级,否则为任何用户返回。
我提出了这个基本查询(尝试在单个查询中执行),但它并没有按照我的要求对行进行优先排序:
SELECT TOP 1 *
FROM Items
WHERE (FullURL LIKE '%website.com/product-132873%'
OR FullURL LIKE '%website.com%')
AND (UserId = 1 or UserId > 0)
理想的优化查询应返回匹配的一行(按优先顺序排列):
希望它有意义。
我很感激您的建议。
答案 0 :(得分:2)
按表达式排序,提供您需要的优先级
SELECT TOP 1 * FROM Items WHERE
(FullURL LIKE '%website.com/product-132873%' OR FullURL LIKE '%website.com%') AND
(UserId = 1 or UserId > 0)
ORDER BY
CASE WHEN FullURL LIKE '%website.com/product-132873% THEN 0 ELSE 2 END
+ CASE WHEN UserId=1 THEN 0 ELSE 1 END
答案 1 :(得分:-1)
SELECT TOP 1 * FROM(SELECT * FROM Items WHERE UserId >= 1)
WHERE
(FullURL LIKE '%website.com/product-132873%' OR FullURL LIKE '%website.com%')