php - 通过 join 和/或 union 将两个 MySQL 查询简化为一个

标签 php mysql join group-by union

我有两个疑问:

(SELECT b904_Vasarlas.PrintedFigure as Image, 
    b904_Vasarlas.ProductColor as Color, 
    SUM(b904_Vasarlas.QTY) as QTY 
FROM `b904_Vasarlas` 
GROUP BY 1, 2) 
ORDER by 1, 2

具有良好的输出:

Image;Color;QTY
"villamos","blue","5"
"villamos","pink","5"
"virag","blue","5"
"virag","pink","5"
"virag2","blue","5"
"virag2","pink","5"
"vitorlas","blue","5"
"vitorlas","pink","5"
"vonat","blue","5"
"vonat","pink","5"
"zaszlo","blue","5"
"zaszlo","pink","5"
"zsiraf","blue","15"
"zsiraf","pink","15"

(SELECT b904_Eladas.PrintedFigure as Image, 
    b904_Eladas.ProductColor as Color, 
    SUM(b904_Eladas.QTY) as QTY 
FROM `b904_Eladas` 
GROUP BY 1, 2) 
ORDER by 1, 2

具有良好的输出:

Image;Color;QTY
"golya","blue","20"
"golya","pink","10"
"hajokormany","blue","20"
"hajokormany","pink","10"
"macska","blue","10"
"macska","pink","10"
"malac","blue","10"
"malac","pink","10"
"villamos","blue","3"
"villamos","pink","3"
"virag","blue","3"
"virag","pink","3"
"virag2","blue","4"
"vitorlas","blue","5"
"vitorlas","pink","5"
"vonat","blue","5"
"vonat","pink","5"
"zaszlo","blue","15"
"zaszlo","pink","5"
"zsiraf","blue","16"
"zsiraf","pink","11"

如何通过一个按图像和颜色列分组的 mysql 查询来获取两个表的 QTY 列的差异?

<小时/>

最后我使用了这段较长的代码,但我认为我可以通过更简单的一个查询字符串来解决问题。

$Eladasok = array();
$ElLoop = 0;
$GyartasQuery = '(SELECT ' . $DBConnection[1] . '_Vasarlas.PrintedFigure as RaktarKep, ' . $DBConnection[1] . '_Vasarlas.ProductColor as RaktarSzin, SUM(' . $DBConnection[1] . '_Vasarlas.QTY) as RaktarQTY  FROM `' . $DBConnection[1] . '_Vasarlas` GROUP BY 1, 2) ORDER by 1, 2';
$EladasQuery = '(SELECT ' . $DBConnection[1] . '_Eladas.PrintedFigure as EladasKep, ' . $DBConnection[1] . '_Eladas.ProductColor as EladasSzin, SUM(' . $DBConnection[1] . '_Eladas.QTY) as EladasQTY  FROM `' . $DBConnection[1] . '_Eladas` GROUP BY 1, 2) ORDER by 1, 2';
$GyartasResult = mysql_query($GyartasQuery);
$EladasResult = mysql_query($EladasQuery);

while(false !== $EladasContent = mysql_fetch_assoc($EladasResult)) {                        
    $new_array[] = $EladasContent;
    $Eladasok[$new_array[$ElLoop][EladasKep] . '-' . $new_array[$ElLoop][EladasSzin]] = $EladasContent[EladasQTY];
    $ElLoop++;
}

while(false !== $GyartasContent = mysql_fetch_assoc($GyartasResult)) {
    if (($GyartasContent[RaktarQTY] - $Eladasok[$GyartasContent[RaktarKep] . '-' . $GyartasContent[RaktarSzin]]) <= 0) {
        $Cellcolour = ' bgcolor="#DDDDDD"';
        $CellHighlight = ' bgcolor="#FFBBBB"';
    } else {
        $Cellcolour = '';
        $CellHighlight = '';
    }

    echo'
    <tr><td align=center' . $CellHighlight . '>'.++$RoNo.'</td>
    <td' . $Cellcolour . '>' . $GyartasContent[RaktarKep] . ' - ' . $GyartasContent[RaktarSzin] .  '</td>
    <td' . $Cellcolour . '>' . intval($GyartasContent[RaktarQTY]) . '</td>
    <td' . $Cellcolour . '>' . intval($Eladasok[$GyartasContent[RaktarKep] . '-' . $GyartasContent[RaktarSzin]]) . '</td>
    <td' . $Cellcolour . '>' .  intval($GyartasContent[RaktarQTY] - $Eladasok[$GyartasContent[RaktarKep] . '-' . $GyartasContent[RaktarSzin]]). 
    '</td></tr>';
}
echo '</tr></table></div>';

最佳答案

数据库1的内容:

b904_vasarlas中选择PrintedFigureProductColorQTY

(Name, color, QTY)
"villamos","blue","5"
"villamos","pink","5"
"virág","blue","5"
"virág","pink","5"
"virág2","blue","5"
"virág2","pink","5"
"vitorlás","blue","5"
"vitorlás","pink","5"
"vonat","blue","5"
"vonat","pink","5"
"zsiráf","blue","5"
"zsiráf","pink","5"
"zászló","blue","5"
"zászló","pink","5"
"zsiráf","blue","10"
"zsiráf","pink","10"

The content of database2:

SELECT PrintedFigure, ProductColor, QTY FROM b904_eladas

(Name, color, QTY)
"vitorlás","blue","5"
"vitorlás","pink","5"
"vonat","blue","5"
"vonat","pink","5"
"zsiráf","blue","5"
"zsiráf","pink","5"
"zászló","blue","5"
"zászló","pink","5"
"zsiráf","blue","5"
"zászló","blue","10"
"zsiráf","blue","6"
"zsiráf","pink","6"
"gólya","blue","10"
"gólya","pink","10"
"hajókormány","blue","10"
"hajókormány","pink","10"
"macska","blue","10"
"macska","pink","10"
"malac","blue","10"
"malac","pink","10"
"villamos","blue","3"
"villamos","pink","3"
"virág","blue","3"
"virág","pink","3"
"virág2","blue","4"
"gólya","blue","10"
"hajókormány","blue","10"

I need the difference of column called QTY when PrintedFigure AND the product color is same in booth databases.

Your result is wrong:

Image,Color,QtyV,QtyE,Qty,QtyOtherWay 
"gólya","blue","0","0","-20","-20"
"gólya","pink","0","0","-10","-10"
"hajókormány","blue","0","0","-20","-20"
"hajókormány","pink","0","0","-10","-10"
"macska","blue","0","0","-10","-10"
"macska","pink","0","0","-10","-10"
"malac","blue","0","0","-10","-10"
"malac","pink","0","0","-10","-10"
"villamos","blue","5","5","2","2"
"villamos","pink","5","5","2","2"
"virág","blue","5","5","2","2"
"virág","pink","5","5","2","2"
"virág2","blue","5","5","1","1"
"virág2","pink","5","5","5","5"
"vitorlás","blue","5","5","0","0"
"vitorlás","pink","5","5","0","0"
"vonat","blue","5","5","0","0"
"vonat","pink","5","5","0","0"
"zászló","blue","10","10","-5","-5"
"zászló","pink","5","5","0","0"
"zsiráf","blue","45","45","13","13"
"zsiráf","pink","30","30","8","8"

I have exactly same problem before when I tried using join and union.

The result is good with code using two queries and while loop for array creation:

#   Name and color      Difference
1   villamos - blue     2
2   villamos - pink     2
3   virág - blue        2
4   virág - pink        2
5   virág2 - blue       1
6   virág2 - pink       5
7   vitorlás - blue     0
8   vitorlás - pink     0
9   vonat - blue        0
10  vonat - pink        0
11  zászló - blue       -10
12  zászló - pink       0
13  zsiráf - blue       -1
14  zsiráf - pink       4

I am asking the solution of one query because I want to cancel using this loop:

            while(false !== $EladasContent = mysql_fetch_assoc($EladasResult)) {                        
                $new_array[] = $EladasContent;
                $Eladasok[$new_array[$ElLoop][EladasKep] . '-' . $new_array[$ElLoop][EladasSzin]] = $EladasContent[EladasQTY];
                $ElLoop++;
            }

关于php - 通过 join 和/或 union 将两个 MySQL 查询简化为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068904/

相关文章:

mysql - 主/外键;使用子查询连接多个表

mysql - 如果不存在子集,则选择全部,否则选择子集

sql - 为什么这个 n-n 关系中的查询什么都不返回?

php - 小巴预订系统的架构建议

php - MLM 业务的复杂 MySQL 查询

Mysql 查询使用 sum 和 group by 选项运行速度非常慢

mysql显示子查询中的字段值

php - 具有两种身份验证方法的 FOSUserBundle

javascript - 将 jQuery 模态变量传递给 PHP 脚本

php - 控制excel导出