Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenposition im Ergebnis rausbekommen

Einklappen

Neue Werbung 2019

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

  • Zeilenposition im Ergebnis rausbekommen

    Hi,

    Ist-Stand:
    Hab eine Liste mit Ssuchworten in einer DB

    Tabelle: begriff
    Spalten: begriff_id | begriff_name

    Tabelle treffer
    Spalten: begriff_id | treffer_value | treffer_time

    Nach diesen begriffen wird in einer anderen Tabelle gesucht. Dann die Aanzahl der Treffer mit dem Suchzeitpunkt in die Tabelle Treffer geschrieben.
    Mit einem JOIN und verschiedenen WHEREs kann man jetzt eine Liste der Begriffe nach Trefferh�ufigkeit sortiert herausbekommen.

    Ich habe also diese nach Trefferzahl sortierte Liste.
    Code:
    SELECT * FROM begriff INNER JOIN treffer ON (begriff.begriff_id=treffer.begriff_id AND treffer.treffer_time = (SELECT MAX(treffer_time) FROM treffer)
    Die Datenmenge ist zu gro� um alles in den Speicher zu laden, so dass ich einen Teil zum Anzeigen immer mit LIMIT aus der DB hole.

    Problem:
    Ich habe einen Begriff und brauche dessen Position in der Liste, also an wie vielter Stelle in der Liste der gesuchte Begriff steht.
    Immo hab ich keine Idee, wie ich das rausbekomme.

    Gru�
    Der Desian
    Wenn dich was ankotzt, machs besser.

  • #2
    Dafür müsstest du mit COUNT() ermitteln, wieviele Datensätze in der Reihenfolge vor dem gewünschten Datensatz stehen. Dieses könntest du über eine Unterabfrage einbinden.

    Kommentar


    • #3
      Scheint schonmal als Ansatz in die Richtung zu gehen.
      Aber um den count() zu ermitteln, der davor oder dahinter ist, brauch ich die Positin, bis zu der ich eben zählen soll.
      Da beißt sich die Katze aber in den Schwanz.
      ODER kennst du einen STOP-Befehl in SQL für einen count()?
      Wenn dich was ankotzt, machs besser.

      Kommentar


      • #4
        na ja wenn du die ID vom zu suchenden Datensatz weist kannst du es ja so machen:
        Code:
        SELECT COUNT(ID) FROM `Table` WHERE ID < ID
        musst die Zahl die rauskommt dan einfach noch mit 1 addieren

        dan hast du die Position, oder verstehe ich dich falsch, und du suchst gar nicht so etwas?
        :arrow: [URL="http://tiny.cc/0xlvv"]Wie man Fragen richtig stellt[/URL]

        Kommentar


        • #5
          Die IDs sind nicht mmer sortiert in der DB aber
          auf jeden Fall bringt mich das auf die Idee, das man das Prinzip auch auf andere sortierungsspalten verwenden kann.
          Wobei: Da gibt es das Problem, dass bei einer Sortierung auch mal gleiche Werte vorkommen können und damit auch nicht die exakte Position.
          Wenn dich was ankotzt, machs besser.

          Kommentar


          • #6
            Zitat von DerDesian
            Wobei: Da gibt es das Problem, dass bei einer Sortierung auch mal gleiche Werte vorkommen können und damit auch nicht die exakte Position.
            Dann musst du eben eine zweite Spalte festlegen, nach der dann sortiert wird. Im Notfall runter bis zum Primärschlüssel.

            Kommentar


            • #7
              Du hast recht, das ist zwar ein ziemliches SubselectDurcheinanderschmeißen aber ich denke so wird es funktionieren.
              Wenn dich was ankotzt, machs besser.

              Kommentar


              • #8
                Hätte noch folgenden Vorschlag um die Zeilennummer zu ermitteln:
                SET @nr = 0;
                SELECT @nr = @nr + 1 AS zeilennummer, table.* FROM table;

                Damit sind die Zeilen nummerriert.
                Jede Lösung verändert das Problem.

                Kommentar


                • #9
                  Zitat von DerDesian
                  Die IDs sind nicht mmer sortiert in der DB
                  dann sortierst du sie halt noch mit SORT by ID, wo ist das Problem?
                  :arrow: [URL="http://tiny.cc/0xlvv"]Wie man Fragen richtig stellt[/URL]

                  Kommentar


                  • #10
                    So ists dann geschehen, damit die Lösung hier auch zu finden ist:

                    gegeben: begriff_id
                    Code:
                    SELECT ((
                     SELECT count(*) FROM treffer WHERE treffer_value > (
                        SELECT treffer_value FROM treffer WHERE begriff_id=$begriff_id
                      )
                    ) + (
                      SELECT count(*) FROM treffer WHERE treffer_value = (
                        SELECT treffer_value FROM treffer WHERE begriff_id=$begriff_id AND begriff_id<$begriff_id
                      )
                    ) + 1) as position;
                    Gruß
                    Der Desian
                    Wenn dich was ankotzt, machs besser.

                    Kommentar

                    Lädt...
                    X