Position eines Datensatzes herausfinden

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

  • Position eines Datensatzes herausfinden

    Hallo,

    ich habe eine Tabelle namens sayings mit zwei Feldern (id, txt), in der ungefähr 200.000 Datensätze gespeichert sind. Alle Ausgaben etc. werden nach dem Feld txt sortiert. Eine Ausgabe würde beispielsweise alle Datensätze anzeigen, die mit 'a' beginnen.

    Nun möchte ich bei einer zusätzlichen Suchfunktion anzeigen lassen, welche Position der jeweilige gefundene Datensatz in der Tabelle unter jenen Datensätzen hat, die beispielsweise mit 'a' beginnen.

    Mit freundlichen Grüßen,
    Ben
    Zuletzt geändert von Bennosch; 25.08.2006, 13:35.

  • #2
    ich fürchte Du wirst hier auch keine anderen Antworten erhalten,
    aber schau mer mal. (hab Deinen Thread im andern Forum gelesen)

    Wie wärs denn wenn Du die Tabelle einfach einmal am Tag durchnummerierst und die Nummerierung in eine zusätzliche Spalte
    schreibst ? - scheint mir das Einfachste zu sein.

    Kommentar


    • #3
      Ich schreibe auch nur hier, weil mir der eine Herr in dem anderen Board ein wenig gegen den Strich ging. Ich kann ja leider auch nichts dafür, dass ich kein SQL-Gott bin :P.

      Zum Thema: Das würde nicht funktionieren, weil ich immer andere Teile der Tabelle durchnummeriert haben muss.

      Mit freundlichen Grüßen,
      Ben

      Kommentar


      • #4
        ich würde es so machen:
        Code:
        SELECT count(id) FROM my_table WHERE txt <= 'b';
        das Beispiel liefert dir die Position des ersten Datensatzes mit dem
        Buchstaben B am Anfang des Strings in txt.
        In deinem Fall müsstest du in das Where nur deinen gefundenen String
        schreiben

        Kommentar


        • #5
          @BLG

          dann hat er nur die Gesamtzahl

          - er hat aber ne Blätterfunktion und möchte je nach Abfrage
          (z.B. Buchstabe f gewählt) die Position eines Datensatzes
          erfahren.

          Da fällt mir ein: wieso baust denn nicht wirklich nen Zähler ein
          und berechnest dann auf welcher Seite und wo sich der Datensatz
          befindet ?

          Oder ist es so, daß Buchstabe w angezeigt wird und Du möchtest die
          Position eines Wortes mit Buchstaben "k" ?

          Kommentar


          • #6
            Koala hat Recht.. das ist nicht das, was ich brauche.

            Ich kann ja mal eben einen Code schreiben, der das tun würde, was ich brauche. Das Problem dabei wäre eben nur die hohe Anzahl an Daten und Besuchern, die dem SQL-Server gewaltig zu schaffen machen würde.

            Mit freundlichen Grüßen,
            Ben

            Kommentar


            • #7
              Also entweder ich habe irgendwas schlechtes in meinem Mittag gehabt
              oder ich bin zu blöd um das zu verstehen!

              Er hat also eine simple Blätterfunktion (a-z)
              und will je nach dem welchen Buchstaben der Benutzer gerade
              gewählt hat, zu jedem resultierenden Datensatz alle mit dem gewählten Buchstaben durchnummerriert haben!? o.O
              Zuletzt geändert von BLG; 25.08.2006, 14:17.

              Kommentar


              • #8
                Der wievielte jeder einzelne von denen ist, die z.B. mit 'a' anfangen, genau!

                War genau richtig, was du gesagt hast!

                Kommentar


                • #9
                  Sorry hatte meinen letzten post nochmal editiert ^^

                  Na dann brauchst du doch bloß mein SELECT abändern!

                  PHP-Code:
                  mysql_query('SELECT count(id) FROM my_table WHERE txt LIKE "a%" AND txt <= "'.$txt.'";'); 
                  Je nachdem wie du vorgehst musst du dann $txt ändern (in diesem Beispiel bin ich mal davon ausgegangen das du für jeden Datensatz eine weitere Abfrage machst um die Nummer zu erhalten)

                  Ich hoffe ich habs jetzt verstanden ^^
                  Zuletzt geändert von BLG; 25.08.2006, 14:26.

                  Kommentar


                  • #10
                    Hier ist der Code, wie er funktionieren würde. Die Auflistung der Suchergebnisse dauert so nur rund fünf Minuten:
                    PHP-Code:
                      // Datenbankabfrage
                      
                    $select  mysql_query("SELECT id,txt FROM spruch WHERE $where LIMIT $start,$perpage");
                      while(
                    $row mysql_fetch_array($select)) {
                        
                    $id    $row[id];
                        
                    $txt   $row[txt];

                        
                    // Position des gefundenen Datensatzes ermitteln    
                        
                    $initial "A";
                        
                    $pos     0;
                        
                    $select_position mysql_query("SELECT id FROM spruch WHERE ucase(txt) LIKE '$inital%'");
                        while(
                    $row_position mysql_fetch_array($select_position)) {
                          
                    $pos++;
                          if (
                    $row_position[id] == $id)
                            break;
                        }

                        echo (
                    "       ID: $id Position: $pos Text: $txt<br><br>\n"); 
                    (Bitte nichts abschreiben, der Code ist so äußerst unperformant!)

                    Mit freundlichen Grüßen,
                    Ben

                    Kommentar


                    • #11
                      Original geschrieben von BLG
                      Also entweder ich habe irgendwas schlechtes in meinem Mittag gehabt
                      oder ich bin zu blöd um das zu verstehen!

                      Er hat also eine simple Blätterfunktion (a-z)
                      und will je nach dem welchen Buchstaben der Benutzer gerade
                      gewählt hat, zu jedem resultierenden Datensatz alle mit dem gewählten Buchstaben durchnummerriert haben!? o.O
                      ja - das würde mit nem Zähler gehn.

                      Was machst aber wenn nur ein Teilbereich gewählt ist (um bei dem
                      Buchstabenbeispiel zu bleiben: alle mit "f") und wenn er "f" gewählt
                      hat, aber eine Position eines Datensatzes von "d" wissen will.

                      Oder er hat einen Teilbereich gewählt und will die Position innerhalb des gesamten Datenbestands wissen?

                      Kommentar


                      • #12
                        Ich habe einen Teilbereich gewählt und will die Position dessen Datensätze innerhalb eines anderen Teilbereichs wissen.

                        BLG: Dein Code funktioniert bei mir nicht und irgendwie glaube ich grad nicht, dass er das richtige tut.

                        Kommentar


                        • #13
                          genau und nun ersetze einfach das hier:
                          PHP-Code:
                              $select_position mysql_query("SELECT id FROM spruch WHERE ucase(txt) LIKE '$inital%'");
                            while(
                          $row_position mysql_fetch_array($select_position)) {
                              
                          $pos++;
                              if (
                          $row_position[id] == $id)
                                break;

                          durch mein Select :

                          PHP-Code:
                          $select_position mysql_query('SELECT count(id) as pos FROM spruch WHERE txt LIKE "'.$inital.'%" AND txt <= "'.$txt.'" ORDER BY txt;');
                          $row_position mysql_fetch_array($select_position);

                          echo 
                          $row_position['pos']; 
                          und schon hast du die Position!

                          EDIT: kleinen Fehler behoben! also ORDER BY bitte nicht vergessen!
                          Zuletzt geändert von BLG; 25.08.2006, 14:35.

                          Kommentar


                          • #14
                            Als Position gibt er mir jetzt jedes mal 0 aus.

                            Kommentar


                            • #15
                              Mach das Semikolon in dem SELECT-Statement mal raus.
                              Wenn dann immernoch 0 rauskommt, schreibe vor
                              PHP-Code:
                              $row_position mysql_fetch_array($select_position); 
                              mal
                              PHP-Code:
                              echo mysql_error(); 
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X