使用JOIN对MySQL查询进行排序

使用JOIN对MySQL查询进行排序,mysql,join,phpmyadmin,Mysql,Join,Phpmyadmin,当我试图在phpmyadmin结果上对我的列进行排序时,我遇到了一个错误。 这就是错误: 我的问题是: SELECT Cliente.Codigo, Cliente.Nome, Contato.Nome, Grupo.Nome FROM Cliente JOIN Grupo ON ( Grupo.codigo = Cliente.Codigo_Grupo ) JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) GROUP BY

当我试图在phpmyadmin结果上对我的列进行排序时,我遇到了一个错误。 这就是错误:

我的问题是:

SELECT Cliente.Codigo, Cliente.Nome, Contato.Nome, Grupo.Nome FROM Cliente JOIN Grupo ON ( Grupo.codigo = Cliente.Codigo_Grupo ) JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) GROUP BY Cliente.Codigo ASC
当我单击列的标题时,ORDER BY被自动添加。
有人知道如何解决这个问题吗?

我怀疑这是错误的SQL:试试看

SELECT Cliente.Codigo AS Codigo, Cliente.Nome, Contato.Nome AS Contato, Grupo.Nome AS Grupo 
FROM Cliente 
JOIN Grupo ON ( Grupo.codigo = Cliente.Codigo_Grupo ) 
JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) 
GROUP BY Cliente.Codigo 
ORDER BY `Grupo` ASC
LIMIT 0,30
在评论中讨论之后,发现框架中的一个潜在缺陷是罪魁祸首: -如果
Grupo.Nome
上没有别名,它将阻塞
Nome
零件 -如果alias在
Grupo.Name
上,它将阻塞别名

有一个非常非常肮脏的方法来解决这个问题,但请注意,这是一个解决办法(最多),而不是一个解决方案

这样做一次:

CREATE VIEW GrupoWorkaround SELECT Grupo.*,Grupo.Nome AS Grupo FROM Grupo
这将创建一个平行视图

不将您的查询更改为

SELECT Cliente.Codigo AS Codigo, Cliente.Nome, Contato.Nome AS Contato, GrupoWorkaround.Grupo
FROM Cliente 
JOIN GrupoWorkaround ON ( GrupoWorkaround.codigo = Cliente.Codigo_Grupo ) 
JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) 
GROUP BY Cliente.Codigo 
ORDER BY `Grupo` ASC
LIMIT 0,30

事实上,将
Grupo
替换为
gruporkaround
,从而消除了对别名的需要。

您希望按哪列排序?我希望在phpmyadmin或jqgrid中选择它时进行排序。这就是为什么我在查询中没有按任何顺序排序。我相信引擎无论如何都会进行排序。如果不需要引擎排序,则需要指定要排序的列。Eugen,它可以正常工作,但我有一个问题,因为我使用JQGrid,搜索不起作用,因为网格与phpmyadmin类似,在运行时使用Grupo.Grupo进行订单查询,而仅使用“Grupo”或Grupo.Nome。明白了吗?这是SQL生成中的一个错误。试着在没有别名的情况下保留
Grupo.Nome
(=删除“AS-Grupo”部分)它工作得很好,但是我不能没有它们,因为我在所有表中都有“Nome”。那是我的问题。从昨天开始,我一直在试图找到任何不使用别名的方法来执行此查询,但我还找不到它。然后你需要一个非常肮脏的技巧,更新我的答案。。。完成