2016-08-05 78 views
1

嗨,有人可以告诉我如何将这两个select语句插入到一个表中。插入两个SELECT语句到mysql表中

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 
FROM GetHistoricMatchesByLeagueAndDateInterval GROUP BY HomeTeam ORDER BY HomeTeam ASC 

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 

我已经tryed这

<?php 
include("conf.php"); 
$query = "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 
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($conn)); 
while($row = mysqli_fetch_assoc($data)){ 
    foreach($row as $cname => $cvalue){ 
     print "$cname: $cvalue\t"; 
    } 
    print "\r\n"; 
} 
?> 

我得到这个错误,当我运行它

列数第1行

我不匹配值计数也试过用多查询

<?php 
include("conf.php"); 
//QUERY 1 
$query = "INSERT INTO test(Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome) 
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;"; 
//QUERY 2 
$query .= "INSERT INTO test(GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway) 
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"; 

/* execute multi query */ 
if ($conn->multi_query($query)) { 
    do { 
     /* store first result set */ 
     if ($result = $conn->store_result()) { 
      while ($row = $result->fetch_row()) { 
       printf("%s\n", $row[0]); 
      } 
      $result->free(); 
     } 
     /* print divider */ 
     if ($conn->more_results()) { 
      printf("-----------------\n"); 
     } 
    } while ($conn->next_result()); 
} 

/* close connection */ 
$conn->close(); 
?> 

当我运行这段代码把它插入数据,但第二个查询还插入空行enter image description here

请一些帮助

末码

<?php 
include("conf.php"); 
$query = "SELECT querya.Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway 
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) 
querya inner join 
(SELECT AwayTeam As Team, 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) 
queryb on querya.Team = queryb.Team"; 
$data= mysqli_query($conn,$query) or die(mysqli_error($conn)); 
while($row = mysqli_fetch_assoc($data)){ 
    foreach($row as $cname => $cvalue){ 
     print "$cname: $cvalue\t"; 
    } 
    print "\r\n"; 
} 
?> 
+1

从联合做'INSERT INTO'是我该怎么做的。错误消息非常明了:联合中的两个查询不会返回相同数量的列。 –

+0

母猪你有任何代码消化 – user3255412

+0

你最清楚丢失的列应该是什么。 –

回答

1

这是伪代码在最好的,但它是一个尝试。

Select (put all fields in here) 
from (put first query in its entirey here) querya 
inner join (put second query here, you will need to modify so it has a 'team' column) queryb 
on querya.team = queryb.team 

想一想吗?联盟是你正在尝试的错误术语...加入是你在找什么。

您有:不需要

"SELECT (Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway) 
from ... 

括号。

"SELECT Team, GamesPlayedHome, GoalsScorredHome, GoalsAcceptedHome, RedCardGotHome, AvarageGoalsScorredHome, AvarageGoalsAcceptedHome, GamesPlayedAway, GoalsScorredAway, GoalsAcceptedAway, RedCardGotAway, AvarageGoalsScorredAway, AvarageGoalsAcceptedAway 
from ... 

我编辑了你的问题,从那里使用它。

+0

我试过了,我得到这个错误'列'队'在字段列表中是不明确的'我在代码末尾添加代码 – user3255412

+0

@ user3255412 - 您将需要指定哪个子查询要从您的顶部取值选择语句。 select select团队的instea,请使用select querya.team。您可能必须使用多个列来完成此操作。 – Twelfth

+0

你能写一个样品吗 – user3255412

0

这看起来像它应该'工作'(如在,没有错误),但它可能不是你想要的和/或我可能被误认为...

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

(你的拼写是残暴的,BTW)

+0

我得到了这个错误'使用的SELECT语句有不同数量的列' – user3255412

+0

这是行不通的。你只选择了6列,但试图插入12.但找到缺失列的荣誉,然而OP应该自己做。 –