mysql-Anweisung mit explode spalten - geht das!?

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

  • mysql-Anweisung mit explode spalten - geht das!?

    Hallo,
    ich bin in php noch ziemlicher Anfänger, hab aber schon ein paasr Sachen geschrieben bzw. nutze php auch recht oft.

    Hier mein Problem:
    ich habe eine SQL-Datenbank mit einer Tabelle "Angestellte". Diese Tabelle enthält die Felder "Namen", "Alter" und "Ort". Jetzt habe ich es ja schonmal hinbekommen mir untereinander in einer liste alle (ca. 400) Datensätze ausgeben zu lassen.

    Doch nun möchte ich gern die Personen mit gleichem Nachnamen zählen, also ich möchte gern wissen wieviele Leute heißen Schulze, wieviele Meier usw. Hierfür brauche ich dann halt nur die Zahl und den jeweiligen Namen.

    Um an das Problem ranzugehen habe ich erstmal versucht die Felder Namen auszulesen (diese sind mit einem Leerzeichen zwischen Vorname und Nachname getrennt) und nur die Nachnamen auszugeben. Als nächsten Schritt wollte ichdie dann irgendwie zählen. Doch bei mir haperts schon beim explode-Befehl :-/

    PHP-Code:
    <?php

    include("connect.php");
    $data mysql_query("SELECT namen FROM `angestellte`");
    list(
    $vorname$nachname) = explode(" "$data);
    echo 
    $vorname;
    echo 
    $nachnam;
    echo 
    mysql_result($vorname0);
    echo 
    mysql_result($nachname0);
    ?>
    Das gibt im Moment garnichts aus :-/ Irgendwie kommt er beim explode nicht mit der SQL-Anweisung klar, oder?

    Kann mir hier irgendjemand auf die Sprünge helfen bzw. mir vielleicht gleich sagen ob ich auf dem richtigen Weg bin um am Ende meine Nachnamenstatistik rauszubekommen!? Oder muss ich das Problem ganz anders angehen!?

    Danke euch schonmal im Voraus.
    mfg Andreas

  • #2
    abgesehen davon, dass der php-code evtl verwurstet ist, ist das immer noch ein simples sql-problem. *move*

    (diese sind mit einem Leerzeichen zwischen Vorname und Nachname getrennt)
    schwachsinn ... lege bitte jeweils ein eigenes feld in der DB an.

    Personen mit gleichem Nachnamen zählen
    Code:
    SELECT nachname, COUNT(nachname) anzahl FROM tabelle GROUP BY nachname
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hallo,
      danke für die schnelle Hilfe, aber ich hätte dazuschreiben sollen, dass die Felder Vor und Nachname nicht getrennt sein dürfen. Ich kann daher keine 2 Felöder anlegen, das muss in einem Feld sein. Daher muss es irgendwie mit explode() realisiert werden :-/

      Kommentar


      • #4
        und warum dürfen die nicht getrennt werden?
        Sunshine CMS
        BannerAdManagement
        Borlabs - because we make IT easier
        Formulargenerator [color=red]Neu![/color]
        Herkunftsstatistik [color=red]Neu![/color]

        Kommentar


        • #5
          Hallo,
          naja das ganze ist nicht nur die Tabelle mit den Namen, es ist ein viel komplexeres System mit Daten, Internetadressen (welche ebenfalls getrennt werden müssen und nach Endungen sortiert werden sollen) usw.

          Daher muss ich irgendwie dieses eine Feld teilen und dann zählen, wie oft der Nachname vorkommt.

          mfg Andreas

          Kommentar


          • #6
            ich verstehe auch immer noch nicht, wieso die dinger nicht getrennt werden dürfen ....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Original geschrieben von Abraxax
              ich verstehe auch immer noch nicht, wieso die dinger nicht getrennt werden dürfen ....
              na weils ein
              viel komplexeres System mit Daten, Internetadressen (welche ebenfalls getrennt werden müssen und nach Endungen sortiert werden sollen) usw.
              Sunshine CMS
              BannerAdManagement
              Borlabs - because we make IT easier
              Formulargenerator [color=red]Neu![/color]
              Herkunftsstatistik [color=red]Neu![/color]

              Kommentar


              • #8
                Hmm. Vielleicht geht Abraxax' Ansatz, aber eben mit einer Stringfunktion (http://dev.mysql.com/doc/refman/4.1/...functions.html), die den Nachnamen rausschneidet.

                Also nach dem Motto

                SELECT [Stringfunktion, die alles ab dem letzten Leerzeichen rausschneidet] AS nachname, COUNT (nachname) as anzahl FROM tabelle GROUP BY nachname

                Das ist aber - wenn es überhaupt geht - sehr, sehr Rechenintensiver Unfug. Und funktioniert nicht, wenn ein Nachname aus zwei oder mehr eigenständigen Wörtern besteht (wie oft z.B. bei Spaniern, Arabern und Portugiesen der Fall). Lieber trennen, das spart tonnenweise Arbeit.

                Kommentar


                • #9
                  aber eben mit einer Stringfunktion
                  das mag zwar evtl. funktionieren aber es ist i.d.t. totaler unfug ....


                  der sowas vorschlägt gehört gefol****
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Original geschrieben von Abraxax
                    Code:
                    SELECT nachname, COUNT(nachname) anzahl FROM tabelle GROUP BY nachname
                    [/B]
                    Hallo,
                    ich habe mir den ganzen Tag den Kopf zerbrochen ob ich nun wirklich die gesamte Datenbank (sind über 1000 Datensätze) umstrukturieren soll nur wegen diese einen Zähöfunktion, die sowieso nur selten genutzt wird.

                    Dann habe ich bissl mit deiner SQL-Anweisung rumgespielt und bin auf das hier gekommen:

                    Code:
                    SELECT name, COUNT(name) anzahl FROM tabelle  WHERE name LIKE '%Meier' GROUP BY name
                    Egal ob das nun gut oder nicht gut ist, es zählt mir eindeutig alle Namen die mit Meier enden - genau das was ich will. Es gibt keine Sonderfälle. Doch hier habe ich noch ein Problem:

                    Diese SQL-Anweisung gibt mir untereinander die verschiedenen Namen aus und dahinter steht jeweils dass er einmal vorkommt (es zählt also Bernd Meier als 1; Claudia Meier aber auch als 1 usw).
                    Das sieht so aus:

                    Bernd Meier 1
                    Claudia Meier 1
                    Silke Meier 1

                    Hier soll aber nur bei Meier eine 3 dahinter stehen, wie kann ich das machen!?!? Also so hier:

                    Meier 3

                    Das ist doch nur irgendein sql-Befehl oder!? Oder muss ich noch eine Klammer setzen!?

                    mfg Andreas

                    Kommentar


                    • #11
                      hast du vornamen und nachnachen nicht in getrennten feldern, wie es sich gehört? wenn nicht, das du ein problem ....
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        @abraxax: am Anfang war ich bissl wütend dass du mich gleich so zurückgewiesen hast, weil ich dachte es macht verdammt viel Arbeit die db-Struktur abzuändern und alles umzuprogrammieren, mittlerweile hab ich es aber so gemacht wie du es gesagt hast mit dem trennen und es funzt wunderbar ;-) - danke dir!

                        Das Umschaufeln der Datensätze ging mit paar tricks im SQL auch ganz leicht.

                        Jetzt hab ich noch eine Frage wo ich nicht weiß ob und wie das geht:

                        Auslesen und editieren usw funzt alles prima, doch wenn ich jetzt 1 Feld auf meiner Website habe wo ich z.B. eine Internetadresse in Form von RTL.de eingebe, wie kriege ich das hin dass "RTL" in Feld1 der Tabelle und ".de" in Feld2 der Tabelle geschrieben wird!? Der Punkt muss aber wieder hinzukommen also nicht de sondern .de

                        Bisher habe ich nur explode benzutzt aber in Bezug auf Daten auslesen, doch wie ich die dann nach dem Teilen in 2 verschiedene Felder schreibe weiß ich nicht :-/

                        mfg Andreas

                        Kommentar


                        • #13
                          Original geschrieben von Abraxax
                          der sowas vorschlägt gehört gefol****
                          Nö. Daß es als Teil einer grundlegenden Architektur Quark ist, versteht sich. Hab ich ja auch selber dazugeschrieben. Aber wenn man an einer fremden Datenbank arbeitet, die Daten an eine fremde Software liefert, und man einmal eine Auswertung durchführen soll, ist das eine völlig legitime Geschichte.

                          Ein Brecheisen ist auch ein völlig schwachsinniges Mittel, eine Tür aufzumachen - außer, man hat den Schlüssel verloren!

                          Kommentar


                          • #14
                            OffTopic:
                            @pekka ... und doch wirst du gefolt*** ...
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar

                            Lädt...
                            X