SQL Abfrage auf 5.0.67 ok, auf 4.0.27 gehts nicht
WernerK
- datenbank
Hallo,
jetzt habe ich endlich nach 3 Tagen so meine SQL Abfragen hinbekommen und lokal getestet. Hier habe ich die MySLQ Version 5.0.67
Habe nun die PHP Datei mit den SQL Abfragen zum Provider (1und1) hochgeladen der aber noch mit 4.0.27 arbeitet.
Und prompt läuft nichts mehr.
Schon die erste SQL Abfrage macht Probleme
SELECT
SUBSTRING(X.maschserien, -6) AS maschcode
From software X
WHERE
X.maschserien != ''
GROUP BY
SUBSTRING(X.maschserien, -6)
HAVING Count(*) > 1
ORDER BY X.IdKd ASC
Ich habe mal im MySQL Manual nachgeschaut wegen den Unterschieden zwischen 4 und 5. Es gab auch schon bei der 4er Version SUBSTRING, GROUP BY und HAVING COUNT
Es scheint aber so das die alte Version mit dem SUBSTRING Probleme hat.
Kann mit jemand weiterhelfen?
vielen Dank
Gruss
Werner
echo $begrüßung;
Habe nun die PHP Datei mit den SQL Abfragen zum Provider (1und1) hochgeladen der aber noch mit 4.0.27 arbeitet.
Das muss bei 1&1 umzukonfigurieren gehen. Leg eine neue Datenbank an, und wähl dafür eine aktuelle Version.
Schon die erste SQL Abfrage macht Probleme
Welche Probleme denn?
Es scheint aber so das die alte Version mit dem SUBSTRING Probleme hat.
Worauf gründet sich da deine Vermutung? Oder was hast du getan, um deine Vermutung zu bestätigen?
echo "$verabschiedung $name";
Hallo dedlfix,
Worauf gründet sich da deine Vermutung? Oder was hast du getan, um deine Vermutung zu bestätigen?
Nun wenn ich die Abfrag in phpmyadmin ausführe
So bekomme ich 700 Einträge mit "maschcode" befüllt
SELECT
X.maschserien AS maschcode
From software X
WHERE
X.maschserien != ''
ORDER BY X.IdKd ASC
Mache ich es so, also nur SUBSTRING im SELECT
SELECT
SUBSTRING(X.maschserien, -6) AS maschcode
From software X
WHERE
X.maschserien != ''
ORDER BY X.IdKd ASC
bekomme ich auch 700 Zeilen (Einträge) zurück aber überall ist "maschcode" leer.
Mache ich es so wie im Ausgangsposting:
SELECT
SUBSTRING(X.maschserien, -6) AS maschcode
From software X
LEFT JOIN produkte C ON C.sachnr = X.sachnr
WHERE
X.maschserien != '' AND C.SortFlag = 'InfoStream'
GROUP BY
SUBSTRING(X.maschserien, -6)
HAVING Count(*) > 1
ORDER BY X.IdKd ASC
Kommt nur ein Datensatz zurück wo auch "maschcode" leer ist.
Das gleich unter meiner Testumgebung mit der 5er Version ist ok.
Ich werde die DB dann bei 1und1 umstellen. Mich hätte nur interessiert warum es sich so verhält, denn eigentlich sind es ja keine besonderen SQL Abfragen oder?
Gruss
Werner
echo $begrüßung;
» Worauf gründet sich da deine Vermutung? Oder was hast du getan, um deine Vermutung zu bestätigen?
Ich meinte, wenn du SUBSTRING() in Verdacht hast, dann prüf doch mal deinen Verdacht
SELECT SUBSTRING('foo', - 6) liefert beispielsweise einen Leerstring.
SELECT SUBSTRING('foo', - 2) liefert 'oo'
So etwas kannst du nun unter beiden MySQL-Versionen ausführen und die Ergebnisse vergleichen.
Mache ich es so wie im Ausgangsposting:
SELECT
SUBSTRING(X.maschserien, -6) AS maschcode
From software X
LEFT JOIN produkte C ON C.sachnr = X.sachnr
Ach, da kommt ja plötzlich auch noch ein Join ins Spiel. Nicht dass der für das Problem verantwortlich ist. Da gab es in der Vergangenheit mal eine Korrektur beim Join-Verhalten. Allerdings hab ich mich mangels persönlichem Problem nie dafür interessiert, was da genau falsch war und wie es geändert wurde.
echo "$verabschiedung $name";
Hallo dedlfix,
ich habe nochmals ein wenig nachgeforscht. Es gab zwei Bugs bzuw. Berichte zu Substring. Event. sind diese verantwortlich für das Verhalten.
http://http://bugs.mysql.com/bug.php?id=17433
Substring with negativ index returns empty..
Zu Problemen mit JOINS habe ich nichts gefunden.
Ich habe die DB jetzt auf 5 umgestellt bei 1und1 und alles klappt wieder.
Grüsse
werner
echo $begrüßung;
ich habe nochmals ein wenig nachgeforscht. Es gab zwei Bugs bzuw. Berichte zu Substring. Event. sind diese verantwortlich für das Verhalten.
http://bugs.mysql.com/bug.php?id=17433
Substring with negativ index returns empty..
Eher weniger, denn die betreffen die Version 4.1. In Version 4.0 gab es noch keine Subquerys. Aber vielleicht wirkte sich der Fehler auch auf andere Konstrukte aus.
Ich habe die DB jetzt auf 5 umgestellt bei 1und1 und alles klappt wieder.
Das ist gut. Jetzt noch Neuentwicklungen an alte Versionen anzupassen, wenn schon zwei Versionen weiter zur Verfügung stehen, ist auch nicht sehr sinnvoll.
echo "$verabschiedung $name";