
[英]How do I prepend/append (concatenate) data to each row in a MySQL result or data set?
[英]How do I Concatenate entire result sets in MySQL?
我正在尝试以下查询:
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
这是三个问题粘在一起,有点儿。 但是,返回的结果集反映了来自查询#1的结果之前的查询#3的结果,这是不期望的。
有没有办法优先考虑这些问题,以便结果全部用于查询#1,然后查询#2全部用于查询#3? 我还不想在PHP中执行此操作(更不用说必须控制第一个查询中显示的结果,而不是在第二个查询中显示等等)。
也许你应该尝试包括第四列,说明它来自哪个表,然后按顺序排序和分组:
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
添加一个附加列,其中包含用于对整个结果集进行排序的硬编码值,如下所示:
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
你可以做一个subselect,像这样的东西
SELECT * FROM (
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%'
) ORDER BY B ASC LIMIT 5
SELECT distinct a,b,c FROM(SELECT A,B,C,1 as o表FROM WHERE字段LIKE'查询%'UNION SELECT A,B,C,2 as o FROM表WHERE字段LIKE'%query'UNION SELECT A,B,C,3作为o FROM表WHERE字段LIKE'%query%')ORDER BY o ASC LIMIT 5
这将是我的方式。 我不知道那个尺度如何。
我不明白
GROUP BY B ORDER BY B ASC LIMIT 5
它是否仅适用于联合中的最后一个SELECT?
mysql实际上是否允许您按列分组但仍然不在其他列上进行聚合?
编辑:aaahh。 我看到mysql确实存在。 它是DISTINCT(b)的特殊版本。 我不想尝试成为该领域的专家:)
如果没有一种对你想要的顺序有意义的排序,不要将结果合并在一起 - 只返回3个独立的记录集,并在数据层中相应地处理它们。
我最终(看着所有的建议)来到这个解决方案,它在我需要和时间之间做了一点折衷。
SELECT * FROM
(SELECT A, B, C, "1" FROM table WHERE B LIKE 'query%' LIMIT 3
UNION
SELECT A, B, C, "2" FROM table WHERE B LIKE '%query%' LIMIT 5)
AS RS
GROUP BY B
ORDER BY 1 DESC
它总共提供了5个结果,从第四个“专栏”中分类并给出了我需要的东西; 一个自然的结果集(它来自AJAX),以及紧随其后的通配符结果集。
:)
/ MP
我不明白为什么需要联合从单表中获取数据
SELECT A, B, C
FROM table
WHERE field LIKE 'query%'
OR field LIKE '%query'
OR field LIKE '%query%'
GROUP BY B
ORDER BY B ASC LIMIT 5
UNION有两个变种。
'UNION' and 'UNION ALL'
在大多数情况下,你真正想要的是UNION ALL,因为它不会在集合之间进行重复消除(Think SELECT DISTINCT
),这可以在执行时间方面节省相当多的成本。
其他人已经提出了多个结果集,这是一个可行的解决方案,但是我会在时间敏感的应用程序或通过WAN连接的应用程序中提醒我这样做,因为这样做可能导致服务器和客户端之间的线路往返更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.