Ankündigung

Einklappen
Keine Ankündigung bisher.

For Schleife funktioniert nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • For Schleife funktioniert nicht

    Hallo,
    nun ja ehrlich gesagt der Titel ist etwas schäbig, ist jedoch leider zutreffend.
    Ich versuche aus der Datenbank mir ein Array zu laden und diese dann später in Excel exportieren.


    PHP-Code:
    $query "SELECT CONCAT(c.code_gestion,' - ',p.lib_gestion) as concat ";
    for (
    $i 1$i <= count($etapes); $i++) {
      
    $query.=",(SELECT IFNULL(ROUND(SUM(c".$i.".`delta`),1),'')
                  FROM cap_val_charges c"
    .$i.", com_ref_gestion_pilotage p".$i."
                  WHERE c"
    .$i.".code_gestion = p".$i.".code_gestion
                  AND c"
    .$i.".code_gestion = p.code_gestion
                  AND c"
    .$i.".entite = ".$entite."
                  AND c"
    .$i.".annee = ".$annee."
                  AND c"
    .$i.".rang_etape = ".$i."
                  AND c"
    .$i.".type = 1
                  AND c"
    .$i.".code_gestion NOT LIKE 'IMMO%'
                  AND c"
    .$i.".actif = 1) as delta".$i.",
               '' as commentaire"
    .$i.",
               (SELECT IFNULL(ROUND(SUM(c"
    .$i.".`montant`),1),'')
                  FROM cap_val_charges c"
    .$i.", com_ref_gestion_pilotage p".$i."
                  WHERE c"
    .$i.".code_gestion = p".$i.".code_gestion
                  AND c"
    .$i.".code_gestion = p.code_gestion
                  AND c"
    .$i.".entite = ".$entite."
                  AND c"
    .$i.".annee = ".$annee."
                  AND c"
    .$i.".rang_etape = ".$i."
                  AND c"
    .$i.".type = 1
                  AND c"
    .$i.".actif = 1) as montant".$i." ";
    }

    $query .="FROM cap_val_charges c, com_ref_gestion_pilotage p
    WHERE c.code_gestion = p.code_gestion
    AND c.entite = "
    .$entite."
    AND c.annee = "
    .$annee."
    AND c.type = 1'"
    ;


    $totalvalues RefGestionPilotage::find_by_sql($query);

    foreach (
    $totalvalues as $totalvalue) {
        for (
    $i 1$i <= count($etapes); $i++){  //$etapes kommt von einer bereits bestehenden Abfrage

        
    $Del 'delta'.$i;
        
    $Com 'commentaire'.$i;
        
    $Mon 'montant'.$i;

        
    $Delta $totalvalue->$Del;
        
    $Commentaire $totalvalue->$Com;
        
    $Montant $totalvalue->$Mon;

    $myVal=array($Delta,$Commentaire,$Montant); 
    Die Ausgabe meines Arrays sollte eigentlich so aussehen:
    Code:
    ^delta1^commentaire1^montant1^delta2^commentaire2^montant2^
    |1|text|9|5|text|8|
    |8|text|8|7|text|3|
    |9|text|6|3|text|7|
    Jedoch bekomme ich immer nur die ersten 3 spalten, also so:
    Code:
    ^delta1^commentaire1^montant1^
    |1|text|9|
    |8|text|8|
    |9|text|6|
    Kein Zweifel irgendwo beim Zählen hört er schon count($etapes) 1 auf müsste aber 2 bekommen.

    Weiss jemand wo es dort brennt. Ich benutze ausserdem Activerecord, worin ich ein Newbie bin. Ich hoffe ihr wisst Rat, vielen Dank und Gruss

    A


  • #2
    Du hast durchnummerierte Tabellen und einen Query in einer For-Schleife?! Hast du ernsthaft das Gefühl, dass sich das hier jemand ansieht?

    Das verbricht ja gegen jegliche gute Programmierart und ist das Paradebeispiel für schlechter Stil.
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      und einen Query in einer For-Schleife
      Schlimmer noch, das sind sub-selects in der for-Schleife.. krass.

      Du solltest dich mal mit Normalisierung auseinandersetzen, ich mutmaße das dein DB-Design schlichtweg grundauf falsch ist.

      zB: http://www.peterkropff.de/site/mysql/normalisierung.htm
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Hallo ChristianK,
        Die For Schleife innerhalb der $query ist leider notwendig, da ich ansonsten nicht meine nach kriterien assozierten Kolonnen bekomme. Die Query funktioniert auch sehr gut. Ich bekomme meine Delta, Commentaire, Montant Daten geliefert, nur halt nicht nach kolonnen. Das Problem beginnt ab der foreach() oder wohl eher gesagt For() Schleife.
        Hoffe dennoch das vielleicht jemand Rat hat, egal wie schlecht mein Stil erscheinen mag.
        Vielen Dank und Gruss

        Kommentar


        • #5
          Zitat von achillix Beitrag anzeigen
          Hoffe dennoch das vielleicht jemand Rat hat, egal wie schlecht mein Stil erscheinen mag.
          Ist halt ein bisschen wie das Reparieren von kaputten Sowjet-Flugzeugen. Vielleicht bringt man sie irgendwann wieder zum Fliegen, aber drinsitzen möchte man sicher nicht.

          Ohne Struktur der MySQL-Tabelle, unvollständiger Code (fehlende Klammern + man weiß gar nicht welche Daten du hier ausgibst), zu wissen welcher Inhalt $etapes hat ist eine Hilfestellung fast unmöglich.

          Kommentar


          • #6
            Hast du dir schon mal die fertigen von PHP erstellten Querys ausgeben lassen und angeschaut ob die korrekt sind?

            Kein Zweifel irgendwo beim Zählen hört er schon count($etapes) 1 auf müsste aber 2 bekommen.
            Das müsste dann schon davor passieren. Prüfe $etapes vor den ganzen DB Abfragen, schau mal was darin überaupt enthalten ist.
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Hallo,
              Sorry, das ich mich erst jetzt melde, war kurz verhindert.
              Die $etapes Geschichte :
              Hier die Abfrage:
              PHP-Code:
              $etapes Etape::find_by_sql("select * from cap_ref_etapes where annee=2015 and type_etp='charges' and actif=1 order by etp_rang"); 
              Diese Abfrage wird ganz am Anfang gestartet um dananch die Variablen innerhalb meiner $query nutzen zu können.

              PHP-Code:
              foreach ($totalvalues as $totalvalue) {
              for(
              $i=1;$i<=$etapes$i++){
                
              //$tete2=array($totalvalues->delta); 
                
              $stepSize count($etapes);
                
              print_r ('Ergebnis: '.$stepSize);
                exit;
              }
              }

              Ergebnis
              Also müsste es 2x die 3 kolonnen (delta,commentaire,montant) ausgeben.
              Es gibt jedoch nur die erste 3 Kolonnen aus.

              Kommentar


              • #8
                Je nachdem wie die Tabellenstruktur aussieht und was für Daten da drin sind kann da halt alles drinstehen. var_dump($etapes) wäre halt mal ne Sache...

                Kommentar


                • #9
                  Nachdem ich

                  PHP-Code:
                      for ($i 1$i <= count($etapes); $i++){
                        echo 
                  '<pre>';
                        
                  var_dump($etapes) ;
                      echo 
                  '</pre>';
                  }
                  exit; 
                  eingeben habe bekam ich das:

                  PHP-Code:
                  array(2) {
                    [
                  0]=>
                    
                  object(Etape)#21 (6) {
                      
                  ["errors"]=>
                      
                  NULL
                      
                  ["attributes":"ActiveRecord\Model":private]=>
                      array(
                  8) {
                        [
                  "etape_id"]=>
                        
                  int(9)
                        [
                  "lib_lg_etp"]=>
                        
                  string(14"Proposition CF"
                        
                  ["lib_ct_etp"]=>
                        
                  string(8"Prop. CF"
                        
                  ["etp_rang"]=>
                        
                  int(1)
                        [
                  "type_etp"]=>
                        
                  string(7"charges"
                        
                  ["id_module"]=>
                        
                  int(5)
                        [
                  "annee"]=>
                        
                  int(2015)
                        [
                  "actif"]=>
                        
                  int(1)
                      }
                      [
                  "__dirty":"ActiveRecord\Model":private]=>
                      array(
                  0) {
                      }
                      [
                  "__readonly":"ActiveRecord\Model":private]=>
                      
                  bool(true)
                      [
                  "__relationships":"ActiveRecord\Model":private]=>
                      array(
                  0) {
                      }
                      [
                  "__new_record":"ActiveRecord\Model":private]=>
                      
                  bool(false)
                    }
                    [
                  1]=>
                    
                  object(Etape)#22 (6) {
                      
                  ["errors"]=>
                      
                  NULL
                      
                  ["attributes":"ActiveRecord\Model":private]=>
                      array(
                  8) {
                        [
                  "etape_id"]=>
                        
                  int(10)
                        [
                  "lib_lg_etp"]=>
                        
                  string(21"Contre proposition DO"
                        
                  ["lib_ct_etp"]=>
                        
                  string(15"Contre prop. DO"
                        
                  ["etp_rang"]=>
                        
                  int(2)
                        [
                  "type_etp"]=>
                        
                  string(7"charges"
                        
                  ["id_module"]=>
                        
                  int(4)
                        [
                  "annee"]=>
                        
                  int(2015)
                        [
                  "actif"]=>
                        
                  int(1)
                      }
                      [
                  "__dirty":"ActiveRecord\Model":private]=>
                      array(
                  0) {
                      }
                      [
                  "__readonly":"ActiveRecord\Model":private]=>
                      
                  bool(true)
                      [
                  "__relationships":"ActiveRecord\Model":private]=>
                      array(
                  0) {
                      }
                      [
                  "__new_record":"ActiveRecord\Model":private]=>
                      
                  bool(false)
                    } 

                  Kommentar


                  • #10
                    Und wie sieht ein fertig generierter Query mit Tabellenstruktur (Modell) aus?
                    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                    Kommentar

                    Lädt...
                    X