Ankündigung

Einklappen
Keine Ankündigung bisher.

Incorrect usage of UNION and LIMIT bei MySQL5.7

Einklappen

Neue Werbung 2019

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

  • Incorrect usage of UNION and LIMIT bei MySQL5.7

    Hallo,
    ich bin PHP Anfänger und weiß, dass man erstmal lernen und googlen soll, bevor man hier eine Frage stellt. Das habe ich getan, sehe aber offensichtlich den Balken vor meinen Augen nicht.
    Ich habe meine DB auf MySQL 5.7 umgestellt und bekomme in einer Abfrage den Fehler "Incorrect usage of UNION and LIMIT"

    Das Snippet sieht so aus:
    PHP-Code:
    $mySearchQuery $mysqli->prepare("(SELECT *,1 AS tablenr FROM lizenzen WHERE seriennr = ? LIMIT 1) UNION (SELECT *,2 AS tablenr FROM lizenz2 WHERE seriennr = ? LIMIT 1)"); 
    In mysql.com habe ich unter "ORDER BY and LIMIT in Unions" gefunden:
    To apply an ORDER BY or LIMIT clause to an individual SELECT, parenthesize the SELECT and place the clause inside the parentheses:

    (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
    UNION
    (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

    für mich sieht die Klammersetzung in meinem Snippet genauso aus, wie in dem Beispiel gefordert.
    Was sehe ich nicht?
    Vielen Dank.

  • #2
    zeig ein wenig von der Datenbankstruktur

    Haben die Tabellen die selbe Anzahl an Spalten, und alle auch vom gleichem Spaltentyp?

    Weil Union kann nur Spalten des gleichen Typs unionen...
    und das limit denke ich gehört außerhalb des 2. selects
    du machst Sub-Selects, es würde auch ohne den Klammern gehen...
    ich würde dir sowieso von MySQL abraten, weil ich aus einer sicheren Quelle weiß, dass dort ziemlich viele Fehler drinnen sind.

    (Ich zum Beispiel nutze schon eine geraume Zeit PostgreSQL)

    Werde mich mal spielen, und diesen Post editieren, oder in einem zweitem mein Beispiel präsentieren

    Kommentar


    • #3
      PHP-Code:
         create table one(id serial primary keyname text unique);
      create table two(id serial primary keyname text unique);
      insert into one(namevalues ('Ich'), ('Du'), ('Er');
      insert into two(namevalues ('Wir'), ('Ihr');
      select name from one union select name from two limit 4
      Bei Fragen, einfach schreiben

      Kommentar


      • #4
        Hallo Kampfbaer,
        vielen Dank für Deine schnellen Tipps.

        Ich habe das LIMIT ans Ende gesetzt:
        PHP-Code:
        $mySearchQuery $mysqli->prepare("(SELECT *,1 AS tablenr FROM lizenzen WHERE seriennr = ?) UNION (SELECT *,2 AS tablenr FROM lizenz2 WHERE seriennr = ?) LIMIT 1"); 
        was keine Veränderung gebracht hat. Gleicher Fehler.

        Dann habe ich mir die Tabellen angeguckt. In beiden Tabellen ist die Spalte seriennr ein varchar(255). Aber in der einen Tabelle hat die Spalte den charset utf8 mit einer collation utf8_general_ci und in der anderen Tabelle latin1 mit latin1_general_ci

        Ja, ich weiß, dass beide charsets total veraltet sind, die DB und PHPs sind vor über 10 Jahren erstellt und ich muss das nur überbrückungsweise am Laufen halten, bis es jemand NEues übernimmt.
        Daher möchte ich ungerne jetzt an der DB an den charsets rumfummeln, wenn es nicht sein muss.

        Hat jemand eine Idee. ob dieser Fehler überhaupt mit den Charsets zusammenhängen kann?

        Vielen Dank

        Kommentar


        • #5
          In deinem Code ist kein ORDER BY vorhanden.

          Kommentar


          • #6
            Vielen Dank Euch Beiden,
            Dank Eurer Hinweise habe ich den Fehler gefunden, der letztendlich blöderweise wo ganz anders lag. Es war ein Fehler in der vorgeschalteten Frontend-Software, die die PHPs aufruft.
            Sorry, dass ich Euch an einer falschen Stelle bemüht habe, aber mir hats sehr geholfen

            Kommentar

            Lädt...
            X