Linuchss: ORDER BY funzt nicht mit UNION

problematische Seite

Hallo,

im Web endlose und uralte Diskussionen gefunden, aber keine Lösung. Auch die selfHTML-Lösung von Daniela Koller 28.06.2005 funktioniert bei mir (MySQL-Vers.=[10.1.37-MariaDB-0+deb9u1]) nicht.

Dies habe ich versucht:

(
SELECT ...
)
UNION
(
SELECT ...
)
UNION
(
SELECT ...
)
ORDER BY ...
LIMIT ...

und dies, ORDER wie von Daniela empfohlen dem letzten Select zugeordnet:

(
SELECT ...
)
UNION
(
SELECT ...
)
UNION
(
SELECT ...
ORDER BY ...
)
LIMIT ...

Und dann sehe ich Beispiele ohne Klammern, auch versucht:

SELECT ...

UNION

SELECT ...

UNION

SELECT ...
ORDER BY ...

LIMIT ...

Da ist noch niochtmal klar, worauf sich ORDER BY beziehen soll, funzt natürlich auch nicht.

Gibt es nach gefühlt zwei Jahrzehnten eine Lösung, die den Suchmaschinen verborgen ist?

fragt Linuchs

  1. problematische Seite

    Hi,

    im Web endlose und uralte Diskussionen gefunden, aber keine Lösung. Auch die selfHTML-Lösung von Daniela Koller 28.06.2005 funktioniert bei mir (MySQL-Vers.=[10.1.37-MariaDB-0+deb9u1]) nicht.

    Um das ganze Select Union Select noch ein weiteres Select legen, und darin den Order-Befehl (Ist das jetzt ein Pleonasmus?) unterbringen.

    cu,
    Andreas a/k/a MudGuard

    1. problematische Seite

      Ho,

      Um das ganze Select Union Select noch ein weiteres Select legen, und darin den Order-Befehl (Ist das jetzt ein Pleonasmus?) unterbringen.

      Danke fürs Mitdenken, aber so wie ich es verstanden habe, ernte ich die Fehlermeldung

      1241: Operand should contain 1 column(s)

      SELECT (
      
      SELECT ...
      
      UNION
      
      SELECT ...
      
      UNION
      
      SELECT ...
      
      ORDER BY fund
      
      ) dummy
      
      LIMIT       0,50 
      

      dummy habe ich als 1 column hinzugefügt, nutzte nichts.

      1. problematische Seite

        Ging das nicht eher so?

        SELECT foo, bar (
                SELECT foo, bar FROM t1
            UNION
                SELECT foo, bar FROM t2
            UNION
                SELECT klick AS foo, klack AS bar FROM t3
        )
        ORDER BY foo
        

        Select will eine Spalte oder Variable selektieren. Die Subselects liefern eine virtuell vereinte Tabelle, die sortiert wird.

        Möglicherweise ist es aber schlauer, eine Tabelle von Typ merge oder connect zu bauen, welche dann (virtuell) die anderen Tabellen enthält.

  2. problematische Seite

    (
    SELECT ...
    )
    UNION
    (
    SELECT ...
    )
    UNION
    (
    SELECT ...
    )
    ORDER BY ...
    LIMIT ...
    

    Lass einfach mal die Klammern weg... - UNION ALL und den feinen Unterschied kennst Du?

        SELECT ...
    UNION
        SELECT ...
    UNION
        SELECT ...
    ORDER BY ...
    LIMIT ...
    
    1. problematische Seite

      danke dir, ich habe es nochmals vergeblich versucht, bis ich auf den Verdacht kam, dass unsichtbare Leerzeichen am Anfang des Strings stehen.

      Leerzeichen waren es nicht, aber zwei Sterne **, die Fettschrift einleiten. Manche Titel von Veranstaltungen hatten auch " vorneweg.

      Nach dem SQL habe ich per PHP alle Textformatierungen entfernt, sie deshalb also nicht gesehen.

      Nun entferne ich die Verdächtigen im SQL:

      ...
      ,REPLACE( REPLACE( trm1.titel, '\"', '' ), '**', '' )  -- fund -- ** stoeren bei ORDER BY
      ...
      

      Jetzt funzt es auch mit ORDER BY