Position mit MySql finden (schwierig)

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

  • Position mit MySql finden (schwierig)

    Hallo Leute,

    ich brauche Eure Hilfe bei einer PHP-Anwendung. Ich habe in einer Text-Spalte Bezeichnungen (Zahlen und Buchstaben). Diese werden mit MySql geordnet ausgegeben. (Alphabetisch und Zahlen nach Größe geordnet)

    $queryStr = "SELECT * FROM tabelle ORDER BY name+0,REPLACE(name,name+0,'')";

    Soweit so gut, klappt wunderbar.

    Jetzt möchte ich die Position eines einzelnen Datensatzes entsprechend der Sortierung finden.

    $queryStr = "SELECT COUNT(*) FROM tabelle WHERE name < '".$document."' ORDER BY name+0, REPLACE(name,name+0,'')";

    Klappt wunderbar bei allen Namen die mit Buchstabe anfangen. Bei Zahlen wird von 0 hochgezählt. Nach der Ordnung müssten alle Namen mit Zahlen von der Position erst nach allen Namen mit Buchstaben kommen.

    name < '".$document."' getauscht mit name+0 < '".$document."'

    jetzt werden die Namen mit Zahlen an der richtigen Stelle angezeigt aber bei Namen mit Buchstaben wird immer 0 ausgegeben.

    Ich hoffe mein Problem ist etwas verständlich. Die Frage, wie bekomme ich jetzt die richtige Position entsprechend meiner Ordnung heraus, egal ob es sich um Zahlen oder Buchstaben handelt.

    Zerbreche mir schon den ganzen Tag den Kopf. Hoffe jemand hat den zündenden Gedanken

  • #2
    Hallo,

    da where immer vor order by angewendet wird, funktioniert das nicht so wie du denkst. Den < Operator interessiert deine selbst gewählte Reihenfolge nicht.

    Die Variante mit replace ist übrigens schlecht, da bei '123abc1234' nur noch 'abc4' übrig bleibt und sich damit keine konsistente Reihenfolge ergibt. Der Einfachheit halber bleib ich aber erstmal dabei, um dir das Prinzip zu verdeutlichen.

    Du brauchst zuerst für die beiden Sortierkriterien je eine Zusatzspalte, z. B.
    Code:
    select
    	name,
    	name+0 as sort_a,
    	replace(name, name+0, '') as sort_b
    from tabelle
    Dann musst du in PHP deinen Suchausdruck ebenfalls zerhacken:
    PHP-Code:
    $docA $document 0;
    $docB str_replace($docA''$document); 
    Da where bei dynamischen Spalten nicht funktioniert, musst du having nehmen:
    Code:
    select
    	name,
    	name+0 as sort_a,
    	replace(name, name+0, '') as sort_b
    from tabelle
    having sort_a <= $docA and sort_b < $docB
    Dafür funktioniert count(*) aber nicht mehr, also musst du
    Code:
    select SQL_CALC_FOUND_ROWS
    	name,
    	name+0 as sort_a,
    	replace(name, name+0, '') as sort_b
    from tabelle
    having sort_a <= $docA and sort_b < $docB
    und danach noch ein
    Code:
    select found_rows();
    absetzen, um zu deinem Ergebnis zu kommen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      wow!

      suchst du einen Job?

      php-Entwicklung | ebiz-consult.de
      PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
      die PHP Marktplatz-Software | ebiz-trader.de

      Kommentar


      • #4
        Zitat von Berni Beitrag anzeigen
        wow!

        suchst du einen Job?
        Meinst du mr_apollon oder mich?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          dich

          php-Entwicklung | ebiz-consult.de
          PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
          die PHP Marktplatz-Software | ebiz-trader.de

          Kommentar


          • #6
            Zitat von Berni Beitrag anzeigen
            wow!

            suchst du einen Job?
            OffTopic:

            Einen Job suche ich nicht, ich bin selbstständig, aber ab November bin ich voraussichtlich für Projekte verfügbar.

            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              @AmicaNoctis
              @berni

              macht das bitte per PM oder sonst wie aus.

              Danke
              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar

              Lädt...
              X