WernerK: SQL Abfrage auf 5.0.67 ok, auf 4.0.27 gehts nicht

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

  1. 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";

    1. 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

      1. 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";

        1. 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

          1. 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";