[英]same sql query different results ?
I have this Sql query 我有这个SQL查询
SELECT tt.ID_Partenaire, tt.Nom_Societe,tt.Image_Societe, tt.id_activite
FROM affiliate AS a
RIGHT JOIN
(SELECT partenaires.ID_Partenaire,
partenaires.Nom_Societe, partenaires.Image_Societe, partenaires.id_activite,
IFNULL(SUM(c.montant_real),0) AS mt1
FROM partenaires
LEFT JOIN commande AS c
ON partenaires.ID_Partenaire=c.id_partenaire
GROUP BY partenaires.ID_Partenaire
)AS tt
ON a.id_partenaire= tt.ID_Partenaire
GROUP BY tt.ID_Partenaire
ORDER BY (IFNULL(SUM(a.montat),0) + mt1) DESC
LIMIT 20
I have two server : 我有两个服务器:
When i execute it on these servers, each one of them give me a different result. 当我在这些服务器上执行它时,每个服务器都给我不同的结果。
I think the problem is in the ORDER BY
我认为问题出在
ORDER BY
As a solution i made : 作为解决方案,我做了:
SELECT ID_Partenaire, Nom_Societe, Image_Societe, id_activite
FROM (SELECT tt.ID_Partenaire, tt.Nom_Societe,tt.Image_Societe,
tt.id_activite,
(IFNULL(SUM(a.montat),0) + mt1) as mm
FROM affiliate AS a
RIGHT JOIN
(SELECT partenaires.ID_Partenaire,
partenaires.Nom_Societe, partenaires.Image_Societe,
partenaires.id_activite,
IFNULL(SUM(c.montant_real),0) AS mt1
FROM partenaires
LEFT JOIN commande AS c
ON partenaires.ID_Partenaire=c.id_partenaire
GROUP BY partenaires.ID_Partenaire
)AS tt
ON a.id_partenaire= tt.ID_Partenaire
GROUP BY tt.ID_Partenaire
ORDER BY mm DESC
LIMIT 20) AS k
I am really confused because MySql does not give me any error but gives different result, i have other queries and i am afraid that he is doing the same for them ! 我真的很困惑,因为MySql不会给我任何错误,但是会给出不同的结果,我还有其他查询,而且我担心他会为他们做同样的事情!
You can find the difference using explain report . 您可以使用解释报告找到区别。 Just run
explain extended SELECT ID_Partenaire, Nom_Societe...
. 只需运行
explain extended SELECT ID_Partenaire, Nom_Societe...
。
Add the limit after the order by block. 在逐个订单之后添加限制。 'limit' and 'order by' is in same level 'limit' done before the 'order by' happen, so give different result
'limit'和'order by'在'order by'发生之前处于同一级别'limit'完成,因此给出不同的结果
try something like this 尝试这样的事情
SELECT ID_Partenaire,
Nom_Societe,
Image_Societe,
id_activite
FROM
(SELECT tt.ID_Partenaire,
tt.Nom_Societe,
tt.Image_Societe,
tt.id_activite,
(IFNULL(SUM(a.montat),0) + mt1) AS mm
FROM affiliate AS a
RIGHT JOIN
(SELECT partenaires.ID_Partenaire,
partenaires.Nom_Societe,
partenaires.Image_Societe,
partenaires.id_activite,
IFNULL(SUM(c.montant_real),0) AS mt1
FROM partenaires
LEFT JOIN commande AS c
ON partenaires.ID_Partenaire=c.id_partenaire
GROUP BY partenaires.ID_Partenaire
)AS tt ON a.id_partenaire= tt.ID_Partenaire
GROUP BY tt.ID_Partenaire
ORDER BY mm DESC
) AS k LIMIT 20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.