mit count, oder wie?!

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

  • mit count, oder wie?!

    Hi, alle zusammen,

    hab ein Problem und komme nicht auf die Lösung.

    habe diese Tabelle test (sieht scheisse aus, ich weiss, aber keine Zeit)
    |----|------|----|
    |Land|Region|Orte|
    |----|------|----|
    |E | a | aa|
    |E | a | ab|
    |E | a | ac|
    |E | b | ba|
    |E | b | bb|
    |D | c | ca|
    |D | d | da|
    |D | d | db|
    |NL | e | ea|
    |----|------|----|

    brauche eine Ausgabe wieviele Regionen und wieviele Orte
    im jeweiligen Land sind
    sollte so aussehen (auch scheisse, s.o.)
    |----|-------------|-----------|
    |Land|Anzahl Region|Anzahl Orte|
    |----|-------------|-----------|
    |E | 2 | 5 |
    |D | 2 | 3 |
    |NL | 1 | 6 |
    |----|-------------|-----------|

    wer hat DIE Idee

    Sitze schon seid Tagen dran und bin ziemlich frustriert

  • #2

    function Zaehlen($land)
    {
    $gefundeneRegionen = array();
    $anzahlRegionen = 0;
    $anzahlStaedte = 0;

    $query = mysql_query("SELECT * FROM tabelle WHERE Land = '$land'");

    $anzahlStaedte = mysql_num_rows($query); // Jeder Datensatz ist eine andere Stadt, oder?

    while ($datensatz = mysql_fetch_object($query))
    {
    if (in_array($datensatz->region, $gefundeneRegionen) == false) // Wenn Region schonmal vorgekommen, nicht mehr mitzählen. Ansonsten Anzahl Regionen hochsetzen und Region zu Array hinzufügen.
    { $anzahlRegionen++;
    array_push($datensatz->region, $gefundeneRegionen);
    } // end if
    } // end while

    echo "Land $land <br>";
    echo "Anzahl Städte: $anzahlStaedte <br>";
    echo "Anzahl Regionen: $anzahlRegionen <br>";

    } // end function

    Vielleicht nicht die einfachstmögliche Lösung, aber sie sollte es tun. Vielleicht hat ein mySQL-Guru ein SQL-Statement für die Sache?

    [Editiert von pekka am 18-09-2001 um 15:59]

    Kommentar


    • #3
      Hi pekka,

      danke für die function.

      Hatte zwar auch eine benutzt, aber deine ist besser.

      Viel lieber wäre mir zwar ein 'SELECT ...', aber
      funktioniert wohl auch so.

      Weiss irgend jemand, wo ich mein Problem posten kann,
      um ein SQL-Statement als Lösung zu bekommen???

      Besten Dank im Vorraus

      tom

      Kommentar


      • #4
        Grad was gefunden:

        SELECT count (DISTINCT Region) AS anzahlRegionen, count(DISTINCT stadt) AS anzahlStaedte FROM tabelle WHERE land = "D"

        zumindest laut Handbuch!

        Kommentar


        • #5
          Schaaade!

          funktioniert leider nicht. Hab's gerade im
          phpmyadmin ausprobiert.

          Fehlermeldung:
          SQL-query:

          SELECT count (DISTINCT region) AS anzahlRegionen, count(DISTINCT ort) AS anzahlOrte FROM hotel WHERE land = "001"
          MySQL said: You have an error in your SQL syntax near '(DISTINCT region) AS anzahlRegionen, count(DISTINCT ort) AS anzahlOrte FROM hote' at line 1
          Back


          Kommentar


          • #6
            Hi pekka,

            by the way

            mein Admin-Tool für die Web-Anwendung läuft unter Delphi.

            Ein SQL kann ich ohne Anpassung in beiden Welten benutzen (php und Delphi). Ne Funktion müsste ich immer umbasteln.

            Danke

            Kommentar


            • #7
              Hmmm....??? Das COUNT (DISTINCT) stammt aus dem Manual! Komische Sache. Weiss da jemand mehr drüber??? Funktioniert count(distinct) mit der BDE in Delphi?

              Kommentar


              • #8
                weder in der BDE von Delphi, im SQL-Explorer von Delphi oder im phpmyadmin

                ist leider so!!!

                Kommentar


                • #9

                  übrigens,

                  hat jemand Erfahrung mit Interbase und PHP

                  Mist, verliere das eigentliche Problem aus den Augen!!!

                  Also, SELECT .... irgendetwas (s.o.)

                  Kommentar


                  • #10
                    Meine Doku auf der Platte ist schon einige Monate alt, in der aktuellen auf mysql.com findet sich auch kein Wort mehr von DISTINCT, dafür ein Kommentar dazu (siehe ganz unten auf der verlinkten Seite). Vielleicht hilft Dir aber folgender Link weiter, dort wird genau dein Problem behandelt:
                    http://www.mysql.com/doc/C/o/Counting_rows.html

                    Kommentar


                    • #11
                      hmm,

                      kannste mir mal sagen wo das im Manual steht ? Ich hätte es nämlich auch so versucht ==>

                      SELECT land, count(DISTINCT region) , count(DISTINCT orte) FROM test group by land

                      leider frisst er das DISTINCT nicht mir ist aber nicht klar warum er das nicht tut

                      Kommentar


                      • #12


                        Hi JoelH,

                        ich hab auch schon diverse Syntaxen, äh Schreibweisen
                        ausprobiert.

                        Bisher gings nur mit:
                        SELECT land, count(region), count(orte) FROM test group by land

                        Zeigt dann aber nur die Anzahl der Sätze je Land an!!

                        Und mit nem Join aus die gleiche Tabelle sieht das Ergebnis ganz seltsam aus. Viel mehr Sätze und viel mehr Zeit.

                        Ich probier trotzdem mal weiter. Muss ja irgendwie gehen.

                        Bye

                        Kommentar


                        • #13
                          Original geschrieben von JoelH
                          hmm,

                          kannste mir mal sagen wo das im Manual steht ? Ich hätte es nämlich auch so versucht ==>

                          SELECT land, count(DISTINCT region) , count(DISTINCT orte) FROM test group by land

                          leider frisst er das DISTINCT nicht mir ist aber nicht klar warum er das nicht tut
                          Also im Manual steht folgendes:

                          COUNT(DISTINCT expr,[expr...])
                          Returns a count of the number of different non-NULL values:
                          select COUNT(DISTINCT results) from student;

                          In MySQL you can get the number of distinct expression combinations that don't contain NULL by giving a list of expressions. In ANSI SQL you would have to do a concatenation of all expressions inside CODE(DISTINCT ..).

                          Im Download-Manual auf manual-split/manual_Reference.html#Functions


                          Kommentar


                          • #14
                            machs doch in zwei verschiedenen Queries. Ist zwar nicht gaanz so komfortabel, funktioniert aber 100%ig:

                            SELECT Land, count (DISTINCT Region) AS anzahlRegionen FROM tabelle group by Land;
                            SELECT Land, count(DISTINCT stadt) AS anzahlStaedte FROM tabelle group by Land;

                            Nach jeder Query eine Schleife; die beiden Schleifen bauen dir ein Array land=>array(anzahlRegionen,anzahlStaedte) zusammen und in einer dritten Schleife gibst du's aus.
                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar

                            Lädt...
                            X