Daten aus Abfrage vergleichen

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

  • Daten aus Abfrage vergleichen

    Halli, hallo,
    ich schreibe Euch, weil ich absolut nicht weiter komme.
    Ich muss voraus schicken, dass ich ein absoluter Neuling bin und hoffe, alles richtig zu beschreiben :

    Ich habe eine db namens spieler und eine Tabelle spieler aus der ich auslese.

    <?
    $verbindung = @mysql_connect("localhost","root","secret");
    if (!$verbindung ) { echo "Keine Verbindung möglich!\n"; exit; }
    $abfrage ="SELECT * from spieler ORDER BY name";
    $erg = mysql_db_query("spieler",$abfrage,$verbindung);
    while (list($id,$saison,$nr,$nralt,$vorname,$name,$gebt,$gebm,$gebj,$gebl,$gebs,$nat,$pos,$posalt,$mit,$gr ,$gew,$kom,$sn,$bild,$coa,$pcnr,$sk,$herst) = mysql_fetch_row($erg)){
    echo "$name, $vorname - $saison<p>\n"; }
    mysql_close($verbindung);
    ?>

    Funtklionert einwandfrei :

    z.B. - Name, Vorname - Saison

    Lang, Karel - 9192
    Lindberg, Chris - 9495
    McNeil, Stevie - 9091
    McNeil, Stevie - 9192
    McNeil, Stevie - 9293

    Ich möchte jetzt gerne, dass doppelte Namen nur einmal geschrieben werden und die Saison aus der nachfolgenden Zeile an die erste Zeile an die Saison angehangen wird.

    Also so : z.B.
    Lang, Karel - 9192
    Lindberg, Chris - 9495
    McNeil, Stevie - 9091 + 9192 + 9293

    Habt Ihr igendeine Idee ???

    Verzweifelte Grüße
    Sylvia
    Zuletzt geändert von IcePingu; 09.02.2004, 16:12.

  • #2
    ja,

    ich hab ne idee

    'gruppenwechsel' heißtsts glaub ich

    prinzip: solange noch der gleiche spieler, nur noch das jahr ausgegeben ... das willst du?

    obwohl, mit nem riesigen self-join sollte da auch was gehen, ... muß ich nachher mal testen
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      PHP-Code:
      <?
      $verbindung = @mysql_connect("localhost","root","secret");
      if (!$verbindung ) { echo "Keine Verbindung möglich!\n"; exit; }

      $abfrage ="SELECT concat(name, ', ', vorname), saison from spieler ORDER BY name group by saison"; 

      $erg = mysql_db_query("spieler",$abfrage,$verbindung); 

      while (list $spieler,$saison) = mysql_fetch_row($erg)){
        if ( $spieler == $tmp_spieler ) {
          $saison[] = $saison;
        } else {
          echo "<p>$tmp_spieler - " . implode(' + ', $saison) . "</p>";
          $tmp_spieler = $spieler;
          $saison = array($saison);
        }
      mysql_close($verbindung); 
      ?>
      ungetestet .. hab keine passende tabelle zum testen
      und bitte versuch nachzuvollziehen was ich hier veranstaltet hab .. schreibs in deiner antwort hin, dann kann ich das kontrollieren .. bringt dir schließlich nichts wenn ich dir nur sage was zu tun ist ..

      btw. versuch auch mal die php tags
      mfg,
      [color=#0080c0]Coragon[/color]

      Kommentar


      • #4
        Halle derHund,
        das mit Gruppenwechsel hört sich vielversprechend an. Nicht ganz soo schwierig. Vielleicht täusche ich mich auch. Ich versuche mal ein bisschen zum Thema zu finden.
        Ich gebe zu Join ist für mich ein Buch mit sieben Siegeln.


        Hallo Coragon,
        danke für den Ansatz. Funktioniert auf Anhieb nicht.
        Ähm, fehlt bei list eine Klammer auf ?
        Ich muss zugeben, dass ich das noch auseinander klamüsern muss.
        Aber ich arbeite dran.
        Vielen Dank erstmal.

        Viele Grüße
        Sylvia

        Kommentar


        • #5
          da fehlt ne klammer ja ..
          musste geschwind essen
          mfg,
          [color=#0080c0]Coragon[/color]

          Kommentar


          • #6
            Schönen Montagnachmittag,

            da bin ich wieder.
            Also, ich habe rum probiert ohne Ende.
            Was ich geschafft habe, dass die Spieler - Name und Vorname -
            nicht mehr doppelt erscheinen.
            Nur, die Saisons werden nicht richtig ausgegeben.

            <?
            $verbindung = @mysql_connect("localhost","root","secret");
            if (!$verbindung ) { echo "Keine Verbindung möglich!\n"; exit; }
            $abfrage ="SELECT saison, name, vorname, pos from spieler GROUP BY name, vorname ORDER BY name, vorname, saison";
            $erg = mysql_db_query("spieler",$abfrage,$verbindung);
            while (list($saison, $name, $vorname, $pos) = mysql_fetch_row($erg)){
            if ( $name != '' && $pos != '') { echo "
            $name, $vorname - $saison<p>"; } }
            mysql_close($verbindung);
            ?>


            Sieht dann z.B. so aus:

            Lindberg, Chris - 9495

            McNeil, Steve / Stevie - 9091

            Meyer, Jayson - 9091


            Was jetzt noch fehlt ist die Saison - z.B. :

            McNeil, Steve / Stevie - 90/91 - 91/92 - 92/93


            Habt Ihr einen Tipp ?

            @ Coragon
            So richtig verstanden habe ich es noch nicht.
            Ich glaube, es fehlte noch eine geschlossene geschwungene Klammer.
            Habe
            $saison = array($saison);
            }
            in
            $saison = array($saison);
            } }
            geändert.
            Dann bekomme ich allerdings die Fehlermeldung
            Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\appserv\www\test2.php on line 9
            Was ich nicht genau verstehe, wo die Variable spieler / $ spieler herkommt / definiert wird.
            Ich wollte eine pm schicken. Ging aber leider nicht

            Viele Grüße
            Sylvia

            Kommentar


            • #7
              also obiges vergiss mal ..
              mein ansatz würd zwar stimmen, aber ..
              a) ich hab mir meine eigenen variablen überschrieben ..
              b) nachm probieren bin ich draufgekommen dass die query nicht stimmt .. bzw sie funktioniert nicht so wie wir uns das erwarten ..

              probieren wir was anderes .. viel einfacher sogar

              wir teilen die tabelle .. spieler und spiele

              so in etwa:
              Code:
              CREATE TABLE `spiel` (
                `id` int(11) NOT NULL auto_increment,
                `spieler` int(11) NOT NULL default '0',
                `saison` varchar(5) NOT NULL default '',
                PRIMARY KEY  (`id`)
              ) TYPE=MyISAM CHARSET=latin1 AUTO_INCREMENT=10 ;
              
              INSERT INTO `spiel` VALUES (1, 1, '02/03');
              INSERT INTO `spiel` VALUES (2, 2, '02/03');
              INSERT INTO `spiel` VALUES (3, 3, '02/03');
              INSERT INTO `spiel` VALUES (4, 4, '02/03');
              INSERT INTO `spiel` VALUES (5, 5, '02/03');
              INSERT INTO `spiel` VALUES (6, 1, '01/02');
              INSERT INTO `spiel` VALUES (7, 3, '01/02');
              INSERT INTO `spiel` VALUES (8, 4, '01/02');
              INSERT INTO `spiel` VALUES (9, 2, '00/01');
              
              # --------------------------------------------------------
              
              CREATE TABLE `spieler` (
                `id` int(11) NOT NULL auto_increment,
                `vorname` varchar(50) NOT NULL default '',
                `nachname` varchar(50) NOT NULL default '',
                PRIMARY KEY  (`id`)
              ) TYPE=MyISAM CHARSET=latin1 AUTO_INCREMENT=6 ;
              
              INSERT INTO `spieler` VALUES (1, 'sepp', 'maier');
              INSERT INTO `spieler` VALUES (2, 'franz', 'maier');
              INSERT INTO `spieler` VALUES (3, 'sepp', 'baier');
              INSERT INTO `spieler` VALUES (4, 'josef', 'holzer');
              INSERT INTO `spieler` VALUES (5, 'siegfried', 'stefan');
              danach tun wir uns in php etwas leichter ..

              PHP-Code:
              <?php

              $verbindung 
              = @mysql_connect("localhost""root""")
                or die ( 
              "Keine Verbindung möglich!<br />\n" mysql_error() );

              $abfrage "SELECT id, vorname, nachname FROM spieler GROUP BY nachname, vorname ORDER BY nachname, vorname"
              $erg mysql_db_query("spieler"$abfrage$verbindung); 
              while ( list(
              $id$vorname$nachname) = mysql_fetch_row($erg) ){

                
              $abfrage "SELECT group_concat(saison SEPARATOR ', ') FROM spiel WHERE spieler = $id";
                
              $erg2 mysql_db_query("spieler"$abfrage$verbindung); 
                list(
              $saison) = mysql_fetch_row($erg2);

                echo 
              "<p>$nachname$vorname - $saison</p>\n";

              }

              mysql_close($verbindung); 

              ?>
              ich wollts eigentlich in eine abfrage packen, ging aber nicht - sorry
              zwecks dem group_concat guck bitte in die mysql docu ..

              die tabelle für die spieler kannst du ja beliebig erweitern
              Zuletzt geändert von Coragon Rivito; 09.02.2004, 19:57.
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                Hallo Coragon,

                das sieht gut aus. Leuchtet mir auch soweit ein.

                Das heisst aber doch, dass ich meine bishereige Datenbank, bzw. Tabelle nicht brauchen kann. Na ja, und das ist eher schlecht. Denn es sind schon etliche Datensätze drin und meine anderen Abfragen / Seiten danach ausgerichtet.

                Sorry.

                Viele Grüße
                Sylvia

                Kommentar


                • #9
                  Ich habs ! Ich habs !

                  Coragon hat mich auf die Idee gebracht. Die Formatierung ist noch nicht das Wahre. Aber das kommt.

                  <?
                  $verbindung = @mysql_connect("localhost","root","secret");
                  if (!$verbindung ) { echo "Keine Verbindung möglich!\n"; exit; }
                  $abfrage = "SELECT vorname, name, nr FROM spieler GROUP BY name, vorname ORDER BY name, vorname";
                  $erg = mysql_db_query("spieler", $abfrage, $verbindung);
                  while ( list($vorname, $name, $nr) = mysql_fetch_row($erg) ){
                  if ( $nr != '' ) {
                  echo "$name, $vorname ";
                  $abfrage2 = "SELECT saison, vorname, name FROM spieler ORDER BY saison";
                  $erg2 = mysql_db_query("spieler", $abfrage2, $verbindung);
                  while (list($saison, $vorname2, $name2) = mysql_fetch_row($erg2) ) {
                  if ( $vorname == $vorname2 && $name == $name2 ) { echo "- $saison<br>"; }
                  } } }
                  mysql_close($verbindung);
                  ?>

                  Danke für Eure Hilfe.

                  Viele Grüße
                  Sylvia

                  Kommentar


                  • #10
                    so gehts natürlich auch

                    aber .. bei deiner 2ten abfrage bekommst du wieder alles ..
                    bau dir da eine where klausel ein .. name und vorname hast du ja schon als variablen von vorher ..
                    dann brauchst auch nicht mehr abzufragen obs der spieler ist, sondern einfach ausgeben ..

                    ( du könntest sogar das group_concat übernehmen und etwas anpassen )
                    mfg,
                    [color=#0080c0]Coragon[/color]

                    Kommentar

                    Lädt...
                    X