Willkommen im cgboard - classic games Forum! Deine gemütliche Retro Gaming Community. Besuche uns auch im Discord Chat.

SQL Like Befehl "Hilfe" gelöst!
#1
0
Hallo,

ich Arbeite grade an der Downloadübersicht für meine Webseite.
Da hab ich vor das wenn man auf Downloads geht erstmal alle in einer art Liste angezeigt werden (natürlich wenns zu viele sind mit Seitewechsel)

Die kann man jetzt schon nach ABC oder ZYX Sortieren, der Filter um nur welche mit A B C usw. anzuzeigen geht auch schon soweit, der Filter nach Genre befindet sich auch schon in Arbeit.

Jetzt hab ich aber noch ein kleines Problem, da ich den SQL Befehl Like zum filtern benutze, bekomme ich es nicht hin das ich über einen Link alles von 0 - 9 angezeigt bekomme.

Hab hier mal einen Ausschnitt von meinem Code, vielleicht hat ja jemand eine Idee. Wink

Code:
// ABC - Sortierung
            $abc = $_GET[abc];
            $alle = "";
            $A0 = "";
            $a = "a";

            if(empty($abc)){
                $ausgabe_alle = "<table cellpadding=\\"3\\" cellspacing=\\"1\\" border=\\"0\\" style=\\"width:100%\\" class=\\"abc_table\\"><tr><td class=\\"abc_tablea\\" align=\\"center\\"><span class=\\"abc_font\\"><a href=$seiten_zahl_dl&sort=$strsort&abc=$alle>Alle</a></span></td>";
                $ausgabe_0 = "<td class=\\"abc_tableb\\" align=\\"center\\"><a href=$seiten_zahl_dl&sort=$strsort&abc=$A0>0-9</a></td>";
                $ausgabe_a = "<td class=\\"abc_tablea\\" align=\\"center\\"><a href=$seiten_zahl_dl&sort=$strsort&abc=$a>A</a></td>";
            }

            $tpl = new Template();
            $tpl->load("downloads_top.tpl");
            $tpl->assign("Seitenzahlen", $Seitenzahlen);
            $tpl->assign("Anzahl", $Anzahl);
            $tpl->assign("listing", $listing);
            $tpl->assign("Alle", "$ausgabe_alle");
            $tpl->assign("0-9", "$ausgabe_0");
            $tpl->assign("A", "$ausgabe_a");

            $sql="SELECT * FROM " . $table_downloads . " ".$selwhere." WHERE Title LIKE '$abc%' AND Genre LIKE '$genre%' ORDER BY Title $strsort LIMIT $start, $step";

Möchte nur nicht zum filtern für jede Zahl einen eigenen Link machen.

EDIT: Hab das Problem jetzt soweit gelöst, indem ich Like gegen REGEXP '^[$abc]' ersetzt habe.
[Bild: 3344442782.png]
FTP Server Zugangsdaten [Bild: <a href=ftp.php?server=markocat.no-ip.biz:2121]" class="mycode_img" />
Zitieren
#2
0
Performanter als Regular Expressions könnte es gehen, wenn Du in der DB einen Index auf die Spalte Title setzt und diese wie folgt abfragst (vorausgesetzt die Collation behandelt Groß/Klein-Buchstaben gleichwertig, wegen der Einsortierung der Umlaute wäre hier aber generell etwas wie German Phonebook anzuraten):

Für alle mit Anfangsbuchstaben A bis Y:
Title >= 'A' AND Title < 'B' (A und B sind je nach gewünschtem Buchstaben anzupassen)

Für alle mit Anfangsbuchstaben Z:
Title >= 'Z'

Für alle mit Anfangszeichen 0 bis 9:
Title < 'A'

Die letzten beiden geben Dir womöglich mehr zurück als gewünscht, nämlich genau dann wenn es auch Titel in der DB gibt, deren Anfangszeichen niederwertiger ist als '0', höherwertiger als 'Z' oder zwischen '9' und 'A' liegt.

Hier kannst Du Dich informieren, wie Du die Abfragen speziell auf Deine Collation spezialisieren kannst: http://www.collation-charts.org/mysql60/

Angenommen, latin1_german2_ci ist bei Dir im Einsatz, dann ließen sich die letzten beiden folgendermaßen konkretisieren, um wirklich nur alles von 0 bis 9 oder mit Anfangsbuchstaben Z anzuzeigen:

Title >= 'Z' and Title < '['
Title >= '0' and Title < ':'


MySQL nutzt Indexe auch dann, wenn auf eine indizierte Spalte mit LIKE abgefragt wird. Von daher wäre für A bis Z auch LIKE 'A%' bzw. LIKE 'Z%' gneuaso performat. Mit Regular Expressions kann ich's mir aber beim besten Willen nicht vorstellen, daher würde ich davon abraten.
[Bild: valid-german.png]
[Bild: logo.gif]
Zitieren
#3
0
Habe mich da immer eines unsauberen Tricks bedient.
Habe eine extra Spalte in der Datenbank angelegt, wo ich den Anfangsbuchstaben speichere. Dies geschieht beim Anlegen des Datensatz automatisch. Ist wie gesagt nicht so sauber, aber um einiges simpler.
Zitieren
#4
0
Danke...

so wie ich es gelöst habe, geht es auch ganz gut.
es sucht so nach den Anfangsbuchstaben des jeweiligen Titels in der Datenbank.

Auch wenn es etwas viel Code ist, funktioniert es bis jetzt ohne Probleme.
[Bild: 3344442782.png]
FTP Server Zugangsdaten [Bild: <a href=ftp.php?server=markocat.no-ip.biz:2121]" class="mycode_img" />
Zitieren
#5
0
Achja was mir noch einfällt. Es gibt auch einen SQL-Befehl dafür.
SUBSTRING(str,pos,len). Mit dieser kann man Teile eines String ausgeben.

Vom MySQL Referenz Handbuch
Code:
SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

Die Formen ohne len-Argument geben einen Teil-String des Strings str zurück, der an der Position pos beginnt. Die Formen mit len-Argument geben einen Teil-String des Strings str mit einer Länge von len Zeichen zurück, der an der Position pos beginnt. Die Formen, die FROM verwenden, sind SQL-Standardsyntax. Es ist auch möglich, einen negativen Wert für pos zu verwenden. In diesem Fall liegt der Anfang des Teil-Strings pos Zeichen vom Ende des Strings (statt von seinem Anfang) entfernt. Ein negativer Wert kann für pos in allen Formen dieser Funktion verwendet werden.

mysql> SELECT SUBSTRING('Quadratically',5);
        -> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
        -> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
        -> 'ratica'        
mysql> SELECT SUBSTRING('Sakila', -3);
        -> 'ila'        
mysql> SELECT SUBSTRING('Sakila', -5, 3);
        -> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
        -> 'ki'

Diese Funktion ist multibytesicher.

Wenn len kleiner als 1 ist, wird der Leer-String zurückgegeben.

SUBSTR() ist ein Synonym für SUBSTRING().
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Hilfe beim MP3 taggen Corsafahrer 1 2.036 12.01.2020, 03:38
Letzter Beitrag: Traxx Amiga EP
  Gradle, Java? HILFE! CrazyJose 3 3.074 01.05.2019, 17:00
Letzter Beitrag: Traxx Amiga EP
  [Grafik] Bräuchte mal eine kleine Hilfe für ein Dekompression Algorithmus für ILBM Bild Dateien SagaraS 7 3.780 14.12.2017, 18:30
Letzter Beitrag: tomwatayan
  [Frage] Snapshot Problem.. brauche Hilfe Gadler 23 7.093 24.07.2013, 15:35
Letzter Beitrag: Heinrich Reich
  [Gelöst!] Datei-Verknüpfung - ich werd noch wahnsinnig! Atreyu 6 3.072 07.05.2013, 17:37
Letzter Beitrag: Dornfeld

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste