Position eines Datensatzes herausfinden

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

  • #16
    Immer noch 0, keine Fehlermeldung.

    Kommentar


    • #17
      Hmm ja hab schon gemerkt, habe lokal mal auf ner Testdatenbank probiert ...

      mit folgendem SELECT gings bei mir ...

      PHP-Code:
      mysql_query('SELECT count( id ) AS pos FROM spruch WHERE txt LIKE 
      "'
      .$initial.'%" AND txt <= (SELECT txt FROM spruch WHERE id ='.$id.' )
      ORDER BY txt;'
      ); 
      hoffe ich habe nicht wieder was vergessen!
      wenns nicht geht kontrolliere einfach nochmal die Variablen- und die Spaltennamen.

      Und wenns dann immer noch nicht geht poste am besten mal deinen Code, wie er jetzt aussieht!

      (das Subselect ist nicht zwingend notwendig, kannst auch dein $txt verwenden, aber bei meinem Test war es jetzt einfach komfortabler)

      EDIT: eigentlich ist das ORDER BY auch überflüssig -> entferne es und du solltest noch etwas schneller sein!
      Zuletzt geändert von BLG; 25.08.2006, 14:07.

      Kommentar


      • #18
        ich hab den ganzen thread nicht durchgelesen, sondern nur die fragestellung. Ich hab das jeweils so gemacht, auf die frage bezogen:

        select count(*) as nullpunkt where txt <'b'

        select count(*) as datensatzpos where txt < '$txt'

        dann ist (datensatzpos-nullpunkt) die Position des Datensatzes mit $txt, bezogen auf alle mit 'b' . Es ist 0-Origin, der für LIMIT sowieso gerade passt. Wichtig scheint mir noch, ein < zu verwenden, nicht ein <= . Ferner sollte txt einen mysql-Index haben.

        Nach Einblick ins BLG würde ich versuchen: (die subquery kann man auch noch einbauen, aber folgendes vermeidet das LIKE)

        select count(*) as relativepos where txt =>'b' and txt < '$txt'


        PS wie im alten Rom und при бывшем Советском Союзе machen die Verbannten die Arbeit.

        Zuletzt geändert von jhaase; 25.08.2006, 14:33.

        Kommentar


        • #19
          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    
              
          $inital "A";
              
          $select_position mysql_query('SELECT count( id ) AS posi FROM spruch WHERE txt LIKE "'.$initial.'%" AND txt <= (SELECT txt FROM spruch WHERE id = '.$id.') ORDER BY txt');
              
          $row_position mysql_fetch_array($select_position);

              echo 
          mysql_error();

              
          $pos $row_position['posi'];    
               
              echo (
          "       ID: $id Position: $pos Text: $txt<br><br>\n");
            } 
          Funktioniert nicht - Fehlermeldung:
          You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT txt FROM spruch WHERE id = 209 ) ORDER BY txt' at line 2
          Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/ja1/03/344/00000009/htdocs/benneu/search.php on line 82
          Variablen etc. sind alle richtig. Dass txt ein Textfeld ist, weißt du, oder?

          Kommentar


          • #20
            hmm~
            Ich glaube dein MYSQL unterstützt keine SubSelects, entferne es und
            schreibe stattdessen wieder $txt rein.
            Entferne das ORDER BY, es hat keinen Effekt (ist mir erst später
            aufgefallen),

            Ja ich weiß das es ein text ist, und du willst doch die Position des
            Datensatzes, also müssen wir alle Datensätze ausschließen, die nach
            dem aktuellen kommen (damit wir dann mit count einfach alle
            abgefragten Id's zählen können!) und das mache ich indem ich sage
            where txt < '.$txt.' ... nur vielleicht liegt es an deiner MySQL-Version
            das es auch so nicht funktioniert? (nur ne Vermutung!)

            Sorry fahre jetzt in den Urlaub, kann dir also erstmal nicht mehr helfen
            ... Hoffe du hast ne Lösung bis ich wieder da bin! ^^ ansonsten setzen
            wir das hier in 2 Wochen fort ^^

            MFG
            BLG

            PS:
            jhaase's Ansatz ist auch nicht schlecht!
            Zuletzt geändert von BLG; 25.08.2006, 15:17.

            Kommentar


            • #21
              Okay, danke! Schönen Urlaub wünsch ich dir..

              Werde den Kram gleich mal probieren.

              Kommentar


              • #22
                $inital vs. $initial, oder ist das nur ein forumpostfehler??


                Kannst du die ganze query posten?
                Zuletzt geändert von jhaase; 25.08.2006, 16:24.

                Kommentar

                Lädt...
                X