2016-08-04 69 views
-1

当我运行没有UNION的代码并且有一个SELECT时它工作正常,但是当我尝试将所有代码一起运行时,它不会将数据插入表中,或者以不同的方式尝试不使用UNION,这里。在一个查询中使用UNION的两个INSERT语句

<?php 
include("conf.php"); 
$query = "INSERT INTO fund(Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway) 
SELECT HomeTeam As Team, COUNT(HomeTeam) AS GamesPlayedHome, SUM(HomeGoals) AS GoalsScorredHome, SUM(AwayGoals) AS GoalsAcceptedHome, SUM(HomeRedCards) AS RedCardGotHome, 
SUM(HomeGoals)/COUNT(HomeTeam) AS AvarageGoalsScorredHome, SUM(AwayGoals)/COUNT(HomeTeam) AS AvarageGoalsAcceptedHome 
FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY HomeTeam ORDER BY HomeTeam ASC 
UNION ALL 
SELECT COUNT(AwayTeam) AS GamesPlayedAway, SUM(AwayGoals) AS GoalsScorredAway, SUM(HomeGoals) AS GoalsAcceptedAway, SUM(AwayRedCards) AS RedCardGotAway, 
SUM(HomeGoals)/COUNT(AwayTeam) AS AvarageGoalsScorredAway, SUM(AwayGoals)/COUNT(AwayTeam) AS AvarageGoalsAcceptedAway 
FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY AwayTeam ORDER BY AwayTeam ASC"; 
$data= mysqli_query($conn,$query) or die(mysqli_error()); 
while($row = mysqli_fetch_assoc($data)){ 
    foreach($row as $cname => $cvalue){ 
     print "$cname: $cvalue\t"; 
    } 
    print "\r\n"; 
} 
?> 
+0

您是否收到任何错误? –

+3

“union”的两个查询中的列需要相同。你的专栏显然不一样。获得'union'('union all'是更可取的)在没有'insert'的情况下工作。 –

+0

我用'UNION ALL'尝试过,但仍然不起作用。并且我得到了'PHP警告:mysqli_error()期望在第12行的C:\ query.php中给出正好1个参数,0' – user3255412

回答

1

尝试是这样的:

INSERT INTO account(employees) 
SELECT * FROM (
SELECT employees FROM account WHERE id = 1 
UNION 
SELECT employees FROM account WHERE id = 2 
) AS a 

裹联合的结果在另一个表。

所以您查询的是:

<?php 
    include("conf.php"); 
    $query = "INSERT INTO fund(Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway) 
    seelct * from (SELECT HomeTeam As Team, COUNT(HomeTeam) AS GamesPlayedHome, SUM(HomeGoals) AS GoalsScorredHome, SUM(AwayGoals) AS GoalsAcceptedHome, SUM(HomeRedCards) AS RedCardGotHome, 
    SUM(HomeGoals)/COUNT(HomeTeam) AS AvarageGoalsScorredHome, SUM(AwayGoals)/COUNT(HomeTeam) AS AvarageGoalsAcceptedHome 
    FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY HomeTeam ORDER BY HomeTeam ASC 
    UNION ALL 
    SELECT COUNT(AwayTeam) AS GamesPlayedAway, SUM(AwayGoals) AS GoalsScorredAway, SUM(HomeGoals) AS GoalsAcceptedAway, SUM(AwayRedCards) AS RedCardGotAway, 
    SUM(HomeGoals)/COUNT(AwayTeam) AS AvarageGoalsScorredAway, SUM(AwayGoals)/COUNT(AwayTeam) AS AvarageGoalsAcceptedAway 
    FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY AwayTeam ORDER BY AwayTeam ASC) as temp"; 
    $data= mysqli_query($conn,$query) or die(mysqli_error()); 
    while($row = mysqli_fetch_assoc($data)){ 
     foreach($row as $cname => $cvalue){ 
      print "$cname: $cvalue\t"; 
     } 
     print "\r\n"; 
    } 
    ?> 
+0

谢谢,但仍然没有成功。我得到这个错误'PHP解析错误:语法错误,意外'temp'(T_STRING)' – user3255412

+0

我编辑了代码。请试试这个。 –

0

当使用UNION ALL时,两个SELECT查询中的列都必须相同。在给定的查询中,列列表不匹配。

INSERT块中的13列,但第一个SELECT包含7列,第二个SELECT它包含6列。

因此,您可以为其余列添加NULL或零(对于非空列)。

希望你需要下面的查询:

INSERT INTO test 
(Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, 
GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway) 
SELECT HomeTeam As Team, COUNT(HomeTeam) AS GamesPlayedHome, SUM(HomeGoals) AS GoalsScorredHome, SUM(AwayGoals) AS GoalsAcceptedHome, SUM(HomeRedCards) AS RedCardGotHome, 
SUM(HomeGoals)/COUNT(HomeTeam) AS AvarageGoalsScorredHome, SUM(AwayGoals)/COUNT(HomeTeam) AS AvarageGoalsAcceptedHome 
, NULL, NULL, NULL, NULL, NULL, NULL 
FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY HomeTeam ORDER BY HomeTeam ASC) 
UNION ALL 
SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
COUNT(AwayTeam) AS GamesPlayedAway, SUM(AwayGoals) AS GoalsScorredAway, SUM(HomeGoals) AS GoalsAcceptedAway, SUM(AwayRedCards) AS RedCardGotAway, 
SUM(HomeGoals)/COUNT(AwayTeam) AS AvarageGoalsScorredAway, SUM(AwayGoals)/COUNT(AwayTeam) AS AvarageGoalsAcceptedAway 
FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY AwayTeam ORDER BY AwayTeam ASC 
+0

谢谢,我试过了,但仍然没有工作 – user3255412

相关问题