Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit Spaltennamen bei UNION über 2 Tabellen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit Spaltennamen bei UNION über 2 Tabellen

    HI,
    ich hab ein Problem mit UNIONS über 2 verschiedene Tabellen. Gedacht ist das Script für eine Suche, deshalb auch die Bezeichnungen. Hier ist erstmal der Code:
    PHP-Code:
    (SELECT `newsID` AS `nid`, `name`, `textFROM `newsWHERE  `textLIKE '%abc%')
    UNION
    (SELECT `pageID` AS `pid`, `name`, `contentFROM `pagesWHERE `contentLIKE '%abc%'
    Jetzt wird auch alles ausgeführt, allerdings wird alles in die Spaltennamen der news-Tabelle gepackt, d.h. dass die pageID nun in nid steckt. Wie kann man das ändern? Ich würde allerginds gerne bei UNIONS bleiben, da doppelte Datensätze nur ein mal vorkommen. Im oben gezeigten Zusammenhang wäre es zwar egal, aber wenn dann noch weitere UNIONS hinzukommen, wäre es schon nützlich.

    Danke schonmal im Vorraus,

    Lollix
    Privatsphäre war gestern, denn:
    Bundestrojaner 2.0: Die neue Version ist da.


  • #2
    Es werden immer die Spaltennamen der ersten SELECT-Liste für die Ausgabe des UNION verwendet. Das ist normal so.

    Wenn Dir die UNION Funktionalität wichtig ist (d.h. identische Datensätze werden eliminiert), dann gibt es keine Lösung.

    Ansonsten eventuell sowas:
    Code:
    (SELECT 'N' AS source , `newsID` AS `nid`, `name`, `text` FROM `news` WHERE  `text` LIKE '%abc%')
    UNION
    (SELECT 'P' AS source ,`pageID` AS `pid`, `name`, `content` FROM `pages` WHERE `content` LIKE '%abc%')
    hier wird eine zusätzliche Spalte SOURCE eingeführt. Damit läßt sich ermittelt aus welcher Tabelle der Datensatz stammt.

    oder dies:
    Code:
    (SELECT `newsID` AS `nid`, NULL AS pid, `name`, `text` FROM `news` WHERE  `text` LIKE '%abc%')
    UNION
    (SELECT NULL, `pageID` AS `pid`, `name`, `content` FROM `pages` WHERE `content` LIKE '%abc%')
    Hier werden die IDs der Tabellen in einer eigenen Spalte ausgegeben. Bei den anderen Tabelle wird dafür ein NULL ausgegeben, damit die Anzahl der Spalten stimmt.

    Grüße
    Thomas

    Kommentar


    • #3
      HI,
      @thomas_w: Danke für deinen Code. Der erste Codeabschnitt hat nicht funktionert, dafür dein zweiter.

      MotD: Thread geschlossen
      Privatsphäre war gestern, denn:
      Bundestrojaner 2.0: Die neue Version ist da.

      Kommentar


      • #4
        Was hat an dem ersten Code nicht funktioniert?

        Grüße
        Thomas

        Kommentar


        • #5
          Was hat an dem ersten Code nicht funktioniert?
          Was auffält ist:
          AS `pid`,
          AS `nid`,
          Das geht bei UNION nicht. Dier Spaltenbezeichner richtet sich immer nach den Namen/Aliasen des ersten Select.

          MotD: Thread geschlossen
          Das überlässt Du bitte uns Moderatoren.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Stimmt, so hatte ich es auch schon beschrieben (siehe #2).

            Code:
            select wort_id as wort1 from wort 
            union 
            select wort_id as wort2 from wort;
            
            
            +-------+
            | wort1 |
            +-------+
            ...
            Ich gehe eher davon aus, dass er die Idee hinter meinem Beispiel 1 nicht verstanden hat, dass die Ergebniszeilen nun anhand der neuen Spalte "source" zuzuordnen sind.

            Aber egal...wenn die 2. Lösung tut, dann ist ja alles gut.

            Grüße
            Thomas

            Kommentar

            Lädt...
            X