Listen mit Blätterfunktion als auch Buchstaben-Direkteinsprung

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

  • Listen mit Blätterfunktion als auch Buchstaben-Direkteinsprung

    Hallo!

    Bei einem meiner Webprojekte können sich die User eine Sammlung von Tonträgern anlegen. Da manche Sammler einige hundert oder tausend Einträge haben, werden die Listen in ihrer Sammlung natürlich sehr lang.

    Eine normale Blätterfunktion ist natürlich schon vorhanden. Jetzt war die Anfrage, ob man es so gestalten könnte, dass man z.B. auf den Buchstaben "F" klickt und sich die Liste dann neu aufbaut, an dem Punkt wo auch der Buchstabenbereich "F" beginnt.

    Beispiel: Ein User hat z.B. 700 Tonträger und der Bereich "F" fängt irgendwo auf Seite 6 seiner Sammlung an. Bei Klick auf "F" sollte man dann also direkt auf Seite 6 springen können.

    Dies stelle ich mir allerdings recht schwierig vor, da ich im Voraus ja eigentlich gar nicht weiß, wieviele Datensätze bei welchem Buchstaben anfallen und somit auch nicht weiß, auf welcher Seite der Sammlungsdarstellung dieser Buchstabenbereich beginnt.

    Hat jemand zufällig eine Idee, wie man dies realisieren könnte, ohne das es zu aufwendig wird (Programmierung wie Datenbankbelastung)? Müßte man da nicht erstmal unzählige COUNTS(...) für jeden Buchstaben des Alphabets durchführen, um erst mal ansatzweise ermitteln zu können, wo welcher Bereich beginnt?

  • #2
    Wenn der Tonträgername nur aus einem Wort besteht kannst das mit
    PHP-Code:
    AND titel LIKE '$alph_sort%' 
    lösen. Ansonsten würd ich dir
    PHP-Code:
    AND LEFT(titel1)='$alph_sort' 
    in der SELECT Abfrage empfehlen.

    PS: Da einige Tonträger ja auch mit Zahlen anfangen können wirst das auch brauchen
    PHP-Code:
    AND LEFT(titel1REGEXP '[0-9%]' 
    lg, dani

    Kommentar


    • #3
      Re: Listen mit Blätterfunktion als auch Buchstaben-Direkteinsprung

      Original geschrieben von Carsten Henkelmann
      Müßte man da nicht erstmal unzählige COUNTS(...) für jeden Buchstaben des Alphabets durchführen, um erst mal ansatzweise ermitteln zu können, wo welcher Bereich beginnt?
      Und wenn du im Telefonbuch die Müllers suchst - dann zählst du vorher auch erst mal, wie viele Namen mit A, B, C, ... beginnend es gibt ...?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Original geschrieben von Daniela
        [B]Wenn der Tonträgername nur aus einem Wort besteht kannst das mit
        PHP-Code:
        AND titel LIKE '$alph_sort%' 
        lösen.
        Ne, da hast Du mich leider komplett falsch verstanden.

        Ich möchte nicht die Titel die mit einen bestimmten Buchstaben beginnen finden, sondern herausfinden auf welcher Seite (z.B. Seite 6 von 20) dieser Buchstabenbereich beginnt. Ausgehend davon, dass z.B. pro Seite 100 Titel angezeigt werden.

        Kommentar


        • #5
          Re: Re: Listen mit Blätterfunktion als auch Buchstaben-Direkteinsprung

          Original geschrieben von wahsaga
          Und wenn du im Telefonbuch die Müllers suchst - dann zählst du vorher auch erst mal, wie viele Namen mit A, B, C, ... beginnend es gibt ...?
          Nö, da schlage ich das Buch irgendwo auf und schaue, bei welchem Buchstaben ich gelandet und blätter mich vor und zurück. Aber auf einer Webseite muss das doch komfortabler gehen...

          Kommentar


          • #6
            Original geschrieben von Carsten Henkelmann
            Ich möchte nicht die Titel die mit einen bestimmten Buchstaben beginnen finden, sondern herausfinden auf welcher Seite (z.B. Seite 6 von 20) dieser Buchstabenbereich beginnt.
            Dann ermittle die Anzahl der Titel, die "vor" diesem Buchstaben kommen.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Original geschrieben von Carsten Henkelmann
              Ne, da hast Du mich leider komplett falsch verstanden.

              Ich möchte nicht die Titel die mit einen bestimmten Buchstaben beginnen finden, sondern herausfinden auf welcher Seite (z.B. Seite 6 von 20) dieser Buchstabenbereich beginnt. Ausgehend davon, dass z.B. pro Seite 100 Titel angezeigt werden.
              ... und nach was musst du filtern damit du herausfinden kannst auf welcher seite der Buchstabenbereich beginnt? Richtig.. die Anfangsbuchstaben des Titels. Und die Summe deiner Abfrageergebnisse kannst dann mit count() zählen.
              z.b. A hat 75 einträge, B hat 200 einträge... und C beginnt bei Seite ceil (275 / EinträgeproSeite)

              Kommentar


              • #8
                @wahsaga: Okay, ich wußte nicht, dass man auch bei String-Abfragen das "<" benutzen kann.

                Allerdings hab ich noch eine kleine Frage:

                Wenn ich
                Code:
                SELECT COUNT(id) FROM table WHERE LEFT(name, 1 ) = 'a'
                ausführe, erhalte ich 1476 als Ergebnis.

                Bei
                Code:
                SELECT COUNT(id) FROM table WHERE name < 'b%'
                AND LEFT( name, 1 ) REGEXP '[a-z%]'
                erhalte ich 1473 als Ergebnis. (Das REGEXP soll dazu dienen, dass nur Einträge berücksichtigt werden, die auch wirklich mit einem Buchstaben beginnen).

                Woher diese Differenz von 3 Datensätzen? Ist eine der Abfragen strenger als die andere?

                Und was mich auch noch interessieren würde: kann ich in einer Abfrage alle Datensätze mit einem Buchstaben zählen, ohne per PHP-Skript in einer Schleife das für jeden Buchstaben einzeln machen zu müssen?
                Zuletzt geändert von Carsten Henkelmann; 07.03.2006, 11:40.

                Kommentar


                • #9
                  Original geschrieben von Carsten Henkelmann Und was mich auch noch interessieren würde: kann ich in einer Abfrage alle Datensätze mit einem Buchstaben zählen, ohne per PHP-Skript in einer Schleife das für jeden Buchstaben einzeln machen zu müssen? [/B]
                  Okay, das beantworte ich mir mal selber:

                  Code:
                  SELECT COUNT(id) , LEFT(name, 1 ) AS lchar FROM table GROUP BY lchar
                  Allerdings habe ich dabei natürlich jedes Sonderzeichen und jede Zahl einzeln. Das läßt sich wohl nicht vermeiden, oder?

                  Kommentar


                  • #10
                    Original geschrieben von Carsten Henkelmann
                    Woher diese Differenz von 3 Datensätzen?
                    Vermutlich hast du drei Datensätze, die mit einem Sonderzeichen beginnen, welches "kleiner" als a ist.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von wahsaga
                      Vermutlich hast du drei Datensätze, die mit einem Sonderzeichen beginnen, welches "kleiner" als a ist.
                      Aber dafür hab ich ja extra das REGEXP eingebaut. Oder ist der reguläre Ausdruck nicht ganz richtig?

                      Kommentar

                      Lädt...
                      X