2016-08-05 11 views
1

hi kann mir jemand sagen, wie man diese beiden Select-Anweisungen in eine Tabelle einfügt.zwei SELECT-Anweisungen in mysql-Tabelle einfügen

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 

Ich habe diese 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"; 
} 
?> 

ich diesen Fehler bekommen, wenn ich es laufen

Spaltenanzahl in Zeile nicht Zählwert entsprechen 1

I auch mit Multi-Abfrage

versucht
<?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(); 
?> 

Wenn ich diesen Code ausführen es die Daten einfügt, aber die zweite Abfrage fügt auch leere Zeilen enter image description here

Bitte etwas Hilfe

Last Code

<?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

Ein "INSERT INTO" von einer Vereinigung zu tun ist, wie ich das tun würde. Die Fehlermeldung ist ziemlich selbsterklärend: die beiden Abfragen in der Union geben nicht die gleiche Anzahl von Spalten zurück. –

+0

Sow Sie haben keine Code-Unterordnung – user3255412

+0

Sie wissen am besten, was die fehlende Spalte sein sollte. –

Antwort

1

Dies ist Pseudo-Code im besten Fall, aber es ist ein Versuch.

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 

Erhalten Sie die Idee? Union ist der falsche Begriff für das, was Sie versuchen ... Join ist, was Sie suchen.

Sie haben:

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

Die Klammern nicht benötigt werden.

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

Ich edited Ihre Frage, verwenden Sie es von dort.

+0

Ich habe es versucht, und ich bekomme diesen Fehler 'Spalte 'Team' in der Feldliste ist mehrdeutig 'Ich füge den Code am Ende der Frage – user3255412

+0

@ user3255412 - Sie müssen angeben, welche Unterabfrage Sie den Wert von in Ihrem oberen nehmen möchten Wählen Sie die Anweisung aus. Wählen Sie aus dem ausgewählten Team "querya.team" aus. Möglicherweise müssen Sie dies mit mehr als einer Spalte tun. – Twelfth

+0

können Sie eine Probe bitte – user3255412

0

Das sieht aus wie es sollte "funktionieren" (wie in, nicht aus Fehler), aber es kann nicht sein, was Sie wollen und/oder ich kann mich irren ...

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 

(Ihre Schreibweise ist scheußlich, BTW)

+0

Ich habe diesen Fehler 'Die verwendeten SELECT-Anweisungen haben eine andere Anzahl von Spalten ' – user3255412

+0

Dies wird nicht funktionieren. Sie wählen nur 6 Spalten aus, versuchen aber, 12 einzufügen. Aber ein großes Lob für die Suche nach der fehlenden Spalte, die das OP selbst hätte erledigen müssen. –