Ankündigung

Einklappen
Keine Ankündigung bisher.

Arrays selektieren

Einklappen

Neue Werbung 2019

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

  • Arrays selektieren

    Hallo,
    ich habe da ein kleines Problem. Und zwar habe ich ein Formular erstellt, wo der Benutzer unter anderem auch in einem Drop-down-menü einen Wert (zwischen 1-10) auswählen kann. Diese Werte werden dann immer einzeln in eine Tabelle gespeichert (punktwert_zielvereinbarung_1-15).
    Nun bin ich gerade etwas ratlos wie ich mit diesen Punktwerten rechnen kann. Und zwar brauche ich die Anzahl der Punktwerte, die auch einen Eintrag besitzen (der spätere user braucht nicht alle menüs auszufüllen).
    Ich müsste es also irgentwie schaffen, daß PHP erkennt, wo ein Wert eingetragen ist, und das Ergebnis in einem array speichern, daß ich dann mit "count" auszählen könnte.
    Kann mir evtl jemand helfen, wie ich da machen könnte?
    Vielen Dank
    Roman

  • #2
    Ich bin es noch einmal.
    Also, ich habe jetzt ein kleines script vorliegen, laufen tut es aber noch nicht:
    PHP-Code:
    <?php
    if ($bewertungsmethode_zielvereinbarung=="arithmetisches Messverfahren")
            {
                
    $alle_punktwerte = array($row->punktwert_zielvereinbarung_1,$row->punktwert_zielvereinbarung_2,$row->punktwert_zielvereinbarung_3,$row->punktwert_zielvereinbarung_4,$row->punktwert_zielvereinbarung_5,$row->punktwert_zielvereinbarung_6,$row->punktwert_zielvereinbarung_7,$row->punktwert_zielvereinbarung_8,$row->punktwert_zielvereinbarung_9,$row->punktwert_zielvereinbarung_10,$row->punktwert_zielvereinbarung_11,$row->punktwert_zielvereinbarung_12,$row->punktwert_zielvereinbarung_13,$row->punktwert_zielvereinbarung_14,$row->punktwert_zielvereinbarung_15);
                
    $anzahl count($alle_punktwerte);
                
    $a 0;
                while(
    $a $anzahl)
                       {
                           echo 
    "$alle_punktwerte[$a] ";
                           
    $a++;
                    }
                echo 
    "$anzahl";        
                
    $anzahl2 count(in_array("1" || "2" || "3" || "4" || "6" || "9",$alle_punktwerte));
                echo 
    "$anzahl2";        
            
            }
    ?>
    Er zeigt mir so das array mit allen Werten an, danach zählt er das array ergolgreich mit der Variablen $anzahl, aber wenn ich dann versuche, mit einem in_array die Werte zu selektieren, die KEINE 0 als Wert haben ($anzahl2), gibt der mir ein Fehler aus...

    Kommentar


    • #3
      Diese Werte werden dann immer einzeln in eine Tabelle gespeichert (punktwert_zielvereinbarung_1-15).
      Das ist eine gute Idee, aber das tust Du anscheinend nicht.
      $alle_punktwerte = array($row->punktwert_zielvereinbarung_1,$row->punktwert_zielvereinbarung_2,$row->punktwert_zielvereinbarung_3,$row->punktwert_zielvereinbarung_4,$row->punktwert_zielvereinbarung_5,$row->punktwert_zielvereinbarung_6,$row->punktwert_zielvereinbarung_7,$row->punktwert_zielvereinbarung_8,$row->punktwert_zielvereinbarung_9,$row->punktwert_zielvereinbarung_10,$row->punktwert_zielvereinbarung_11,$row->punktwert_zielvereinbarung_12,$row->punktwert_zielvereinbarung_13,$row->punktwert_zielvereinbarung_14,$row->punktwert_zielvereinbarung_15);
      Das sieht so aus, als wenn Du die Werte alle zusammen in einem Datenbankeintrag speicherst.
      Wenn Du sie jeweils einzeln in einer Tabelle speicherst, kannst Du die Aggregatfunktionen der Datenbank verwenden. In der Regel gibt es mindestens Sum(), Count() und eben auch Avg() (Average, arithm.Mittelwert)

      Kommentar


      • #4
        Nee, das stimmt. Die werte werden schon in 1 Tabelle geschrieben, nur eben in verschiedenen Spalten.
        Aber mit der avg() Funktion wäre mir schon super geholfen, weil ich unter anderem das auch messen muss! Allerdings brauche ich dafür NUr die WErte, die KEINE "0" besitzten, weil das Ergebniss ansonsten verfälscht würde....
        Also bleibt mein Problem: Wie bekomme ich es hin, nur die WErte in ein Array zu speichern, die nur Werte über "0" besitzen!

        Kommentar


        • #5
          Du kannst auch bei Aggregatfunktionen mit einer WHERE Klausel einschränken.

          Mal ein Beispiel
          Code:
          CREATE TABLE `benutzer` (
            `benutzer_id` int(11) unsigned NOT NULL auto_increment,
            `benutzer_name` varchar(64) NOT NULL default '',
            PRIMARY KEY  (`benutzer_id`)
          );
          
          CREATE TABLE `zielvereinbarung` (
            `zielvereinbarung_id` int(11) unsigned NOT NULL auto_increment,
            `benutzer_id` int(11) unsigned NOT NULL default '0',
            `zielvereinbarung_punktwert` int(11) unsigned NOT NULL default '0',
            PRIMARY KEY  (`zielvereinbarung_id`)
          );
          
          INSERT INTO `benutzer` VALUES (1,'Irma');
          INSERT INTO `benutzer` VALUES (2,'Gustav');
          
          INSERT INTO `zielvereinbarung` VALUES (1,2,10);
          INSERT INTO `zielvereinbarung` VALUES (2,1,9);
          INSERT INTO `zielvereinbarung` VALUES (3,2,6);
          INSERT INTO `zielvereinbarung` VALUES (4,2,0);
          INSERT INTO `zielvereinbarung` VALUES (5,2,8);
          INSERT INTO `zielvereinbarung` VALUES (6,1,0);
          INSERT INTO `zielvereinbarung` VALUES (7,1,11);
          Und jetzt den Mittelwert von Gustav abfragen (nur Werte ungleich 0)
          Code:
          SELECT
            Avg(z.zielvereinbarung_punktwert)
          FROM
            zielvereinbarung as z
          JOIN
            benutzer as b
          ON
            z.benutzer_id=b.benutzer_id
          WHERE
            b.benutzer_name="Gustav"
          AND
            z.zielvereinbarung_punktwert!=0
          Ausgabe ist 8.000. Gustav hat vier Einträge, 10,8,6,0. Die 0 fällt weg, 24/3 = 8. Passt.

          Kommentar


          • #6
            Hey, danke erste inmal für die Antwort.
            Aber mein Problem ist ja, daß ich nicht nur 1 Punktwert in der Tabelle habe, sondern 15 verschiedene, die ich auf einen nenner bringen soll.
            Ich könnte wohl mit dem avg() arbeiten, brauche aber trotzdem erst einmal ein array, daß alle Punktwerte ohne "0" besitzt.
            Die Antwort ist zwar interessant, für mich aber leider nicht zu gebrauchen...

            Kommentar


            • #7
              Was soll ich sagen?
              Ausgabe ist 8.000. Gustav hat vier Einträge, 10,8,6,0. Die 0 fällt weg, 24/3 = 8. Passt.
              Wieviele Einträge sind dasß mehr als einer?

              Kommentar

              Lädt...
              X