SMF Forum Upgrade Fehler

Hallo,
wenn ich mein SMF Forum auf die aktuelle Version upgrade, kommt folgende Fehlermeldung:

[quote]ALTER TABLE smf_smileys
ORDER BY LENGTH(code) DESC;
Caused the error:
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 ‘LENGTH(code) DESC’ at line 2[/quote]
Hier gibt es zwei Lösungsvorschläge dazu. Einer ist es, beim Hoster nach einem MySQL Upgrade zu fragen. :wink:
Also es ist kein großes Drama, die Installationsdateien des SMF Upgrades so zu editieren, dass es funktioniert, aber ich wollte hier dennoch mal nachfragen, wieso das so ist, wie es ist. :astonished:

Hi,

der Fehler liegt daran, dass SMf einfach blöd ist :stuck_out_tongue:

Du kannst jedoch einfach in der upgrade1-1.sql ORDER BY LENGTH(code) DESC; durch ORDER BY code DESC; ersetzen - dann sollte es klappen :wink:

[quote=“kerbination”]Hi,

der Fehler liegt daran, dass SMf einfach blöd ist :stuck_out_tongue:

Du kannst jedoch einfach in der upgrade1-1.sql ORDER BY LENGTH(code) DESC; durch ORDER BY code DESC; ersetzen - dann sollte es klappen :wink:[/quote]

Und warum geht hier LENGTH nicht?

weils einfach falsch ist oder net?
Denn er muss auch was haben nach dem er Ordnen kann^^
Angenommen LENGTH(code) ergibt 7, so kann er mit ORDER BY 7 DESC nicht viel anfangen… er braucht eben ne Spalte nach der er sortieren kann. (ausgenommen er würde LENGTH immer für die aktuelle zu sortierende spalte (code) ausführen, allerdings glaube ich das dem nicht so ist… sonst wäre es auch gegangen bzw. das wäre nicht der Fehler gewesen)

Abgesehen davon, dass auch ORDER BY 7 oder ORDER BY ‘abc’ syntaktisch vollkommen korrekt sind - wenn da LENGTH(code) steht, dann ist das die Länge des Inhaltes der Spalte code, und damit durchaus ein dynamischer und je Datensatz individueller Wert.

nur führt er LENGTH scheinbar beim Compilen des SQL Befehls in ByteCode schon aus (wie erwartet) und dort wäre es dann ein Fester wert vom 1. “code” bzw. vermutlich existiert dort dieses noch nicht einmal. Darum ergibst auch einen Fehler.
Natürlich würde es gehen wenn er es Dynamisch machen würde, aber dies tut er ja offensichtlich nicht
Er braucht halt keinen festen wert denn dieser ist ein Fehler… 7 wäre so einer (darum das beispiel)

Aus Sicht von SQL sieht es so aus:

[quote]ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC
ORDER BY 7 DESC[/quote]statt mit einem Dynamischen Wert wie einer Spalte o.ä. Im Prinzip hätte man gleich “ORDER BY 7 DESC” statt “ORDER BY LENGTH(code) DESC” eingeben können^^
(natürlich immer vorausgesetzt das es damals half LENGTH rauszunehmen ansonsten ist alles was ich sagte nur möglich gewesen^^ Aber scheinbar ist es auch so)

edit:
im Großen und Ganzen stimmt doch sogar was ich sagte :smiley:
Es ist halt in einer “älteren” MySQL function noch nichts dynamisch ausgeführt. Nur neuere Supporten dies. Wie gesagt… wie ichs aus C++ und SQLite kenne, muss der SQL Befehl erst compiled werden und dort werden Funktionen demnach schon vor dem compilieren ausgeführt was dazu führ das diese nicht dynamisch sind. Erst in einer neuen MySQL Version wurde dies geändert sodass functionen genauso dynamisch sind wie Spaltennamen und damit deren Inhalt.
edit2:
ok… es lag natürlich nicht daran das es nicht Dynamisch ausgeführt wurde… sry für das :smiley:
Es lag nur daran das die Version eine Tabelle nur nach einem Feld Sortieren konnte statt auch nach dem Rückgabe wert einer Funktion. Ich wusste nicht das es um die Sortierung einer Tabelle ging :smiley: