Position eines Datensatzes herausfinden

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by Bennosch; 25-08-2006, 12: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.

    Comment


    • #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

      Comment


      • #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

        Comment


        • #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" ?

          Comment


          • #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

            Comment


            • #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
              Last edited by BLG; 25-08-2006, 13:17.

              Comment


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

                War genau richtig, was du gesagt hast!

                Comment


                • #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 ^^
                  Last edited by BLG; 25-08-2006, 13:26.

                  Comment


                  • #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

                    Comment


                    • #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?

                      Comment


                      • #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.

                        Comment


                        • #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!
                          Last edited by BLG; 25-08-2006, 13:35.

                          Comment


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

                            Comment


                            • #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...

                              Comment

                              Working...
                              X