---
title: "UNION SELECT"
url: "https://www.typo3.net/d/126525-union-select"
source: "typo3.net"
tags: ["Backend","Frage","TYPO3 8"]
created: "2018-01-15"
last_reply: "2018-01-29"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# UNION SELECT

Backend · 2 Antworten · gestartet 2018-01-15

## Eröffnungsbeitrag

**getit** · 2018-01-15 · [Beitrag #1](https://www.typo3.net/d/126525-union-select/1)

Ich möchte gerne in einem Aufwasch auf zwei Tabellen zugreifen.

Ich dach das kann ich mit einem UNION SELECT machen:

```php
public function customQuery() {
  $query = $this->createQuery();
  $query->statement('SELECT uid, null, bezeichnung FROM tx_kkbaybw_domain_model_gebaeude UNION ALL SELECT uid, vorname, nachname FROM tx_kkbaybw_domain_model_ansprechpartner');
  return $query->execute();
}
```

im setup.ts

```php
KKSoftware\Kkbaybw\Domain\Model\FeSearch {
  mapping {
    tableName = tx_kkbaybw_domain_model_gebaeude
  }
}
```

```php
<?php

namespace KKSoftware\Kkbaybw\Domain\Model;

use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;

class FeSearch extends AbstractEntity {
  /**
   * bezeichnung
   *
   * @var string
   */
  protected $bezeichnung = '';

  /**
   * @var string
   */
  protected $vorname = '';

  /**
   * Returns the bezeichnung
   *
   * @return string $bezeichnung
   */
  public function getBezeichnung() {
    return $this->bezeichnung;
  }

  /**
   * @return string
   */
  public function getVorname() {
    return $this->vorname;
  }
}
```

Wenn ich die customQuery() ausführe bekomme ich eine ResultSet mit der richtigen Anzahl von Einträgen.
Nur sind die Einträge für den zweiten Teil des UNIONs (SELECT ... ansprechpartner) leer.

Ausgabe des DebuggerUtility:

```php
TYPO3\CMS\Extbase\...\QueryResult {
  0 => + KKSoftware\Kkbaybw\Domain\Model\FeSearch (uid=1, pid=0)
  1 => + ...FeSearch (uid=2, pid=0)
  ...
  17 => KKSoftware\Kkbaybw\Domain\Model\FeSearch 'see above' (uid=1, pid=0)
  ...
  21 => ... FeSearch 'see above'(uid=6, pid=0)
}
```

Die Schlüssel 0-16 kommen aus dem ersten Teil des UNIONs und sind mit einem '+' markiert - d.h. da ist ein Objekt darunter.
Die Schlüssel 17-21 kommen aus dem zweiten Teil des UNIONS sind leer.

## Antworten

### [#2](https://www.typo3.net/d/126525-union-select/2) · getit · 2018-01-18

Ich habs.

Direkt in der Datenbank (geht nicht über ext_tables.sql) den VIEW erzeugt:

```sql
select (`tx_xxx_domain_model_gebaeude`.`uid` + 100000) AS `uid`,`tx_xxx_domain_model_gebaeude`.`bezeichnung` AS `name`,'' AS `vorname`,'' AS `nachname`,concat(`tx_xxx_domain_model_gebaeude`.`telefon_landvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`telefon_ortsvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`telefon_durchwahl`) AS `telefon`,concat(`tx_xxx_domain_model_gebaeude`.`fax_landvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`fax_ortsvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`fax_durchwahl`) AS `fax`,'' AS `email`,'' AS `mobile`,'' AS `sprechzeiten_nach_vereinbarung`,'' AS `sprechzeiten_sonderzeiten`,`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_nach_vereinbarung` AS `oeffnungszeit_nach_vereinbarung`,`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_sonderzeiten` AS `oeffnungszeit_sonderzeiten`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_bis_vormittags`) AS `oeffnungszeit_mo_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_bis_nachmittags`) AS `oeffnungszeit_mo_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_bis_vormittags`) AS `oeffnungszeit_di_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_bis_nachmittags`) AS `oeffnungszeit_di_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_von_vormittags`,' -',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_bis_vormittags`) AS `oeffnungszeit_mi_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_bis_nachmittags`) AS `oeffnungszeit_mi_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_von_vormittags`,' _ ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_bis_vormittags`) AS `oeffnungszeit_do_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_bis_nachmittags`) AS `oeffnungszeit_do_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_bis_vormittags`) AS `oeffnungszeit_fr_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_bis_nachmittags`) AS `oeffnungszeit_fr_nachmittags`,'gebaeude' AS `typ`,'' AS `gebaeude`,'' AS `behoerde` from `tx_xxx_domain_model_gebaeude` union all select `tx_xxx_domain_model_ansprechpartner`.`uid` AS `uid`,concat(`tx_xxx_domain_model_ansprechpartner`.`vorname`,' ',`tx_xxx_domain_model_ansprechpartner`.`nachname`) AS `name`,`tx_xxx_domain_model_ansprechpartner`.`vorname` AS `vorname`,`tx_xxx_domain_model_ansprechpartner`.`nachname` AS `nachname`,concat(`tx_xxx_domain_model_ansprechpartner`.`telefon_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`telefon_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`telefon_durchwahl`) AS `telefon`,concat(`tx_xxx_domain_model_ansprechpartner`.`fax_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`fax_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`fax_durchwahl`) AS `fax`,concat(`tx_xxx_domain_model_ansprechpartner`.`mobil_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`mobil_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`mobil_durchwahl`) AS `mobile`,`tx_xxx_domain_model_ansprechpartner`.`email` AS `email`,`tx_xxx_domain_model_ansprechpartner`.`sprechzeiten_nach_vereinbarung` AS `sprechzeiten_nach_vereinbarung`,`tx_xxx_domain_model_ansprechpartner`.`sprechzeiten_sonderzeiten` AS `sprechzeiten_sonderzeiten`,'' AS `oeffnungszeit_nach_vereinbarung`,'' AS `oeffnungszeit_sonderzeiten`,'' AS `oeffnungszeit_mo_vormittags`,'' AS `oeffnungszeit_mo_nachmittags`,'' AS `oeffnungszeit_di_vormittags`,'' AS `oeffnungszeit_di_nachmittags`,'' AS `oeffnungszeit_mi_vormittags`,'' AS `oeffnungszeit_mi_nachmittags`,'' AS `oeffnungszeit_do_vormittags`,'' AS `oeffnungszeit_do_nachmittags`,'' AS `oeffnungszeit_fr_vormittags`,'' AS `oeffnungszeit_fr_nachmittags`,'ansprechpartner' AS `typ`,`tx_xxx_domain_model_ansprechpartner`.`gebaeude_id` AS `gebaeude`,`tx_xxx_domain_model_ansprechpartner`.`ansprechpartner_behoerde` AS `behoerde` from `tx_xxx_domain_model_ansprechpartner`
```

Dann habe ich dazu ein Model angelegt:

```php
<?php

namespace KKSoftware\XXX\Domain\Model;

class FeSearch extends BaseModel {

	/**
	 * @var string
	 */
	protected $name;

	/**
	 * @var string
	 */
	protected $vorname;

	/**
	 * @var string
	 */
	protected $nachname;

	/**
	 * @var string
	 */
	protected $telefon;

	/**
	 * @var string
	 */
	protected $fax;

	/**
	 * @var string
	 */
	protected $mobile;

	/**
	 * @var int
	 */
	protected $sprechzeitenNachVereinbarung;

	/**
	 * @var string
	 */
	protected $sprechzeitenSonderzeiten;

	/**
	 * @var int
	 */
	protected $oeffnungszeitNachVereinbarung;

	/**
	 * @var string
	 */
	protected $oeffnungszeitSonderzeiten;

	/**
	 * @var string
	 */
	protected $email;

	/**
	 * @var string
	 */
	protected $oeffnungszeitMoVormittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitMoNachmittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitDiVormittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitDiNachmittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitMiVormittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitMiNachmittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitDoVormittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitDoNachmittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitFrVormittags;

	/**
	 * @var string
	 */
	protected $oeffnungszeitFrNachmittags;

	/**
	 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Gebaeude>
	 */
	protected $gebaeude;

	/**
	 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Behoerde>
	 */
	protected $behoerde;

	/**
	 * @return string
	 */
	public function getName() {
		return $this->name;
	}

	/**
	 * @return string
	 */
	public function getVorname() {
		return $this->vorname;
	}

	/**
	 * @return string
	 */
	public function getNachname() {
		return $this->nachname;
	}

	/**
	 * @return string
	 */
	public function getTelefon() {
		return $this->telefon;
	}

	/**
	 * @return string
	 */
	public function getFax() {
		return $this->fax;
	}

	/**
	 * @return string
	 */
	public function getMobile() {
		return $this->mobile;
	}

	/**
	 * @return string
	 */
	public function getEmail() {
		return $this->email;
	}

	/**
	 * @return int
	 */
	public function getSprechzeitenNachVereinbarung() {
		return $this->sprechzeitenNachVereinbarung;
	}

	/**
	 * @return string
	 */
	public function getSprechzeitenSonderzeiten() {
		return $this->sprechzeitenSonderzeiten;
	}

	/**
	 * @return int
	 */
	public function getOeffnungszeitNachVereinbarung() {
		return $this->oeffnungszeitNachVereinbarung;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitSonderzeiten() {
		return $this->oeffnungszeitSonderzeiten;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitMoVormittags() {
		return $this->oeffnungszeitMoVormittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitMoNachmittags() {
		return $this->oeffnungszeitMoNachmittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitDiVormittags() {
		return $this->oeffnungszeitDiVormittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitDiNachmittags() {
		return $this->oeffnungszeitDiNachmittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitMiVormittags() {
		return $this->oeffnungszeitMiVormittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitMiNachmittags() {
		return $this->oeffnungszeitMiNachmittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitDoVormittags() {
		return $this->oeffnungszeitDoVormittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitDoNachmittags() {
		return $this->oeffnungszeitDoNachmittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitFrVormittags() {
		return $this->oeffnungszeitFrVormittags;
	}

	/**
	 * @return string
	 */
	public function getOeffnungszeitFrNachmittags() {
		return $this->oeffnungszeitFrNachmittags;
	}

	/**
	 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Gebaeude>
	 */
	public function getGebaeude() {
		return $this->gebaeude;
	}

	/**
	 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Behoerde>
	 */
	public function getBehoerde() {
		return $this->behoerde;
	}
}
```

Und ein (leeres) Repository.

Anschließend kann ich mit

```php
$feSearchRepository = $this->objectManager->get('KKSoftware\\XXX\\Domain\\Repository\\FeSearchRepository');
$result = $feSearchRepository->findAll();
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($result);exit;
```

mein VIEW abfragen.

### [#3](https://www.typo3.net/d/126525-union-select/3) · pstranghoener · 2018-01-29

Hey,
cool das du dein Problem alleine gelöst hast. Danke, dass du deine Lösung mit uns geteilt hast.

Liebe Grüße
Philipp

---

Quelle: „UNION SELECT“, typo3.net, https://www.typo3.net/d/126525-union-select
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
