sergio: order by lpad

Hallo,

Seit dem ich in meiner datenbank den feldtyp von TEXT auf INT umgestellt habe funktioniert folgende funktion nur noch fehlerhaft:

function xxx($vari)
{
 -> include datenbankconnection <-

$qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY LPAD(abc, 10, 0) DESC LIMIT 1 ";

$result = mysql_query($qry);
 if (mysql_num_rows($result)) $abc = mysql_result($result, 0, 0)+1;
 else $abc = 1;

return $abc;
}

ich suche also die nächsthöhere id aus dem feld was jetzt ja auf INT steht, als es auf TEXT stand lief alles noch prima, aber wieso findet er dann plötzlich als höchste id nur noch die id die als letztes hinzugefügt wurde als alles noch auf TEXT stand?

bitte helft mir. und n neuen code brauch ich jetzt ja wohl auch ;-) weil zurück auf TEXT will ich auch nicht umstellen, weil ich dann mit BETWEEN nicht korrekt suchen kann.

DANKE
sergio

  1. Hi,

    ich suche also die nächsthöhere id aus dem feld was jetzt ja auf INT steht, als es auf TEXT stand lief alles noch prima, aber wieso findet er dann plötzlich als höchste id nur noch die id die als letztes hinzugefügt wurde als alles noch auf TEXT stand?

    der Code und so scheint OK zu sein. Versuche doch mal mit der MAX() den hoechsten Wert zu holen. Was passiert?

    Gruss,
    Ludger

    --
    "Was macht eigentlich Jimmy Hartwig?"
    1. Hallo,

      der Code und so scheint OK zu sein. Versuche doch mal mit der MAX() den hoechsten Wert zu holen. Was passiert?

      MAX() kenne ich nicht. wo baue ich den denn ein? hört sich aber schon mal gut an :-)

      sergio bedankt sich!

  2. yo,

    Seit dem ich in meiner datenbank den feldtyp von TEXT auf INT umgestellt habe funktioniert folgende funktion nur noch fehlerhaft:

    welchen feldtyp hast du den umgestellt abc ?

    $qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY LPAD(abc, 10, 0) DESC LIMIT 1 ";

    LPAD ist eine zeichenkettenfunktion. sollte abc vom typ integer sein, so werden die eingefügten 0 durch LPAD sowieso keine wirkung haben, da integer keine führenden nullen besitzt und somit wird sich auch die sortierung verändern.

    Ilja

    1. yo,

      $qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY LPAD(abc, 10, 0) DESC LIMIT 1 ";

      habe vergessen zu erwähnen, dass eine sortierung bei dieser query sowieso sinnlos ist, da durch die WHERE klausel nur ein wert zugelassen wird.

      Ilja

      1. Hi,

        sergio bedankt sich!
        und wird mal weiter gucken ;-)

        1. tsja,

          vielen dank!

          function xxx($vari)
          {
           -> include datenbankconnection <-

          -----
           $qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY abc DESC LIMIT 1 ";
          -----

          $result = mysql_query($qry);
           if (mysql_num_rows($result)) $abc = mysql_result($result, 0, 0)+1;
           else $abc = 1;

          return $abc;
          }

          so gehts

          1. yo,

            $qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY abc DESC LIMIT 1 ";

            nochmal der tipp, das ORDER BY abc ist hier einfach nur überflüssig.

            Ilja

            1. Hi,

              $qry = "SELECT abc FROM $table WHERE abc='$vari' ORDER BY abc DESC LIMIT 1 ";

              nochmal der tipp, das ORDER BY abc ist hier einfach nur überflüssig.

              stellt allerdings sicher, dass wenn doch mehrere Datensaetze gefunden werden nur einer ins Recordset geladen wird.

              Sollten da zwei drin sein, koennte das Programm ja veilleicht ABSTUERZEN.

              ;-)

              Gruss,
              Ludger

              --
              "Die SPD im Aufwind?"
              1. yo,

                nochmal der tipp, das ORDER BY abc ist hier einfach nur überflüssig.

                stellt allerdings sicher, dass wenn doch mehrere Datensaetze gefunden werden nur einer ins Recordset geladen wird.

                das macht aber das limit und nicht das order by....

                Ilja