我正在尝试以下查询:
SELECT A,B,C FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query%'
GROUP BY B ORDER BY B ASC LIMIT 5
Run Code Online (Sandbox Code Playgroud)
这是三个问题粘在一起,有点儿.但是,返回的结果集反映了来自查询#1的结果之前的查询#3的结果,这是不期望的.
有没有办法优先考虑这些问题,以便结果全部用于查询#1,然后查询#2全部用于查询#3?我还不想在PHP中执行此操作(更不用说必须控制第一个查询中显示的结果,而不是在第二个查询中显示等等).
Mar*_*ato 16
也许你应该尝试包括第四列,说明它来自哪个表,然后按顺序排序和分组:
SELECT A,B,C, "query 1" as origin FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C, "query 2" as origin FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C, "query 3" as origin FROM table WHERE field LIKE '%query%'
GROUP BY origin, B ORDER BY origin, B ASC LIMIT 5
Run Code Online (Sandbox Code Playgroud)
添加一个附加列,其中包含用于对整个结果集进行排序的硬编码值,如下所示:
SELECT A,B,C,1 as [order] FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C,2 as [order] FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C,3 as [order] FROM table WHERE field LIKE '%query%'
GROUP BY B ORDER BY [order] ASC, B ASC LIMIT 5
Run Code Online (Sandbox Code Playgroud)