我是 Oracle 数据库查询开发的初学者。我正在为我的项目开发搜索功能,以按Zip或Name或City搜索 Stores ,其中将向用户提供“一个 HTML 输入框”来输入搜索词。只有一个名为 Stores 的表
显示搜索结果的条件是
- 如果与结果匹配的搜索词
ZIP
应该是GROUP
和SORT BY ZIP DESC
- 如果与结果匹配的搜索词
NAME
应该是 group 和 sort byNAME IN ASC
并且与 to 相同CITY
- 如果搜索词与
ZIP
,NAME
和CITY
(to all) 匹配,则首先匹配的结果ZIP
应显示在 中DESC order
,CITY
然后是 TheNAME
我试过这样的事情
SELECT s.uuid AS uuid, COUNT(*) over() AS rowcount
FROM Stores s
WHERE s.postalcode LIKE '%87%'
OR s.city LIKE '%87%'
OR CONCAT(CONCAT(s.firstname, ' '),s.lastname) LIKE '%87%'
GROUP BY s.city, s.postalcode,
CONCAT(CONCAT(s.firstname, ' '),s.lastname), s.uuid
ORDER BY CASE WHEN s.postalcode LIKE '%87%'
THEN s.postalcode END DESC,
CASE WHEN CONCAT(CONCAT(s.firstname, ' '),s.lastname) LIKE '%87%'
THEN CONCAT(CONCAT(s.firstname, ' '),s.lastname)
ELSE s.postalcode END ASC,
CASE WHEN s.city LIKE '%87%'
THEN s.city END
此查询未按预期显示结果(我的意思是它显示没有顺序的结果,而不是像第一个 zip,下一个城市后跟名称)。
如何进行查询以满足上述要求,我是否需要使用存储过程来做到这一点?任何建议将不胜感激。