Avatar billede CRRL Juniormester
29. juni 2017 - 13:23 Der er 1 kommentar og
1 løsning

Samle mysql linjer når de er ens

Jeg har nogen varelinjer som ligger i en Mysql database.
Varelinjerne skal kombineres når de er ens.

Det vil sige at alle "pcs" skal ligges sammen og alle "value" skal ligges sammen der hvor "origin" og "costumsid" er ens.

Min mysql ser sådan her ud:
INSERT INTO `TTreport` (`id`, `costumsid`, `origin`, `pcs`, `xorder`, `xid`, `unitprice`, `valuedkk`) VALUES
(514, 20, 'CH', '8', 124246297, '6873303', '112.15375', '897.23'),
(515, 20, 'SE', '2', 124246297, '6873302', '30', '60'),
(516, 20, 'CH', '1', 124246297, '6873304', '4000', '4000'),
(517, 3, 'NL', '5', 124246297, '6873301', '100', '500');


I det ovenstående eksempel er det 3 linjer der skal kombineres til én linje.


Her er min PHP kode:

<?
$hentfinal=mysqli_query($conn,"SELECT * FROM TTreport ");
                       
                        while($row=mysqli_fetch_array($hentfinal)){
                           
                            $hent=mysqli_query($conn,"SELECT * FROM TTFinalReport WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                           
                            $count=mysqli_num_rows($hent);
                                    if($count==0){
                                    mysqli_query($conn, "INSERT INTO TTFinalReport (costumsid,origin,pcs,unitprice,valuedkk) VALUES('$row[costumsid]','$row[origin]','$row[pcs]','$row[unitprice]','$row[valuedkk]')");
                                   
                                    }
                                    else
                                    {
                                        $hentet=mysqli_query($conn,"SELECT * FROM TTreport WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                        $counted=mysqli_num_rows($hentet);
                                       
                                        while($rows=mysqli_fetch_array($hentet)){
                                            $pcs=$pcs+$rows["pcs"];
                                            $value=$value+$rows["valuedkk"];
                                        }
                                            $m++;
                                        echo $m." ".$counted."<br>";
                                        if($counted==$m){
                                            mysqli_query($conn, "UPDATE TTFinalReport SET pcs='$pcs' WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                            mysqli_query($conn, "UPDATE TTFinalReport SET valuedkk='$value' WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                        $m=0;
                                        $pcs=0;
                                        $value=0;
                                        }
                                       
                                    }

                        }

?>

Her er resultatet i TTFinalReport

INSERT INTO `TTFinalReport` (`id`, `costumsid`, `origin`, `pcs`, `unitprice`, `valuedkk`) VALUES
(37, 20, 'CH', '8', '112.15375', '897.23'),
(38, 20, 'SE', '2', '30', '60'),
(39, 3, 'NL', '5', '100', '500');


Som det virker nu, så bliver alle costumsid og origin lagt sammen, men pcs, og valuedkk bliver ikke opdateret.


Nogen foreslag ?
Avatar billede arne_v Ekspert
29. juni 2017 - 18:46 #1
Utestet:

INSERT INTO ttfinalreport(costumsid,origin,pcs,unitprice,valuedkk)
SELECT costumsid,origin,SUM(pcs),unitprice,SUM(valuedkk) FROM ttreport GROUP BY costumsid,origin
Avatar billede CRRL Juniormester
07. juli 2017 - 09:44 #2
Tak for svaret Arne_v,

Jeg løste dog selv problemet ved at skifte else{ ud med if($count==1)
og derefter virkede det helt som det skulle.

Her er min nye kode.

                        $hentfinal=mysqli_query($conn,"SELECT * FROM TTreport ");
                       
                        while($row=mysqli_fetch_array($hentfinal)){
                           
                            $hent=mysqli_query($conn,"SELECT * FROM TTFinalReport WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                           
                            $count=mysqli_num_rows($hent);
                                    if($count==0){
                                    mysqli_query($conn, "INSERT INTO TTFinalReport (costumsid,origin,pcs,unitprice,valuedkk) VALUES('$row[costumsid]','$row[origin]','$row[pcs]','$row[unitprice]','$row[valuedkk]')");
                                   
                                    }
                                    if($count==1)
                                    {
                                        $hentet=mysqli_query($conn,"SELECT * FROM TTreport WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                        $counted=mysqli_num_rows($hentet);
                                       
                                        while($rows=mysqli_fetch_array($hentet)){
                                            $pcs=$pcs+$rows["pcs"];
                                            $value=$value+$rows["valuedkk"];
                                        }
                                   
                                       
                                            mysqli_query($conn, "UPDATE TTFinalReport SET pcs='$pcs' WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                            mysqli_query($conn, "UPDATE TTFinalReport SET valuedkk='$value' WHERE costumsid='$row[costumsid]' AND origin='$row[origin]'");
                                        $m=0;
                                        $pcs=0;
                                        $value=0;
                                       
                                       
                                    }

                        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester