Zum Inhalt springen

Wie einfache Datenbankabfrage in extbase (SELECT name FROM ...) machen?

Erstellt am 19. Juli 2016 · 4 Antworten · letzte Antwort am 22. Juli 2016

Tags: Datenbank, Frage

marion-j ·

Hallo,

ich habe mir eine Funktion erstellt (bzw. den Code irgendwo gefunden) mit der man nach Namen in einer Datenbak suchen kann. Funktioniert auch.

  public function Search($keyword) {
    $query = $this->createQuery();
    $query->matching($query->like('name','%' . $keyword . '%'));
    return $query->execute();
  }

Aber wie erstelle ich eine einfache Abfrage wie folgende:

SELECT name FROM tabelle GROUP BY name

Gibt es irgendwo eine verständliche Übersicht der Möglichkeiten zur Datenbankabfragen?

marion-j ·

Danke, aber wie ein GROUP BY eingebaut wird, habe ich nicht herausgefunden.
Mein Code:

  public function testDb() {
    $query = $this->createQuery();
    $query->matching($query->name);
    return $query->execute();
  }

Folgendermaßen klappt es zwar, aber gibt es keine Möglichkeit GROUP BY im extbase query unterzubringen?

$query->statement("SELECT * from tabelle GROUP BY name");

und dann habe ich noch folgendes Problem, wenn ich anstatt * den Feldnamen 'name' einsetze, funktioniert es nicht! Dann wird mir der erste Name in der Tabelle so oft ausgegeben wie es Datensätze gibt. Und 'vorname' kann ich auch nicht abfragen, da gibt es nur leere Felder zurück.

$query->statement("SELECT name from tabelle GROUP BY name");

Kommt raus:
Mustermann
Mustermann
Mustermann

und wie kann ich vor Ausgabe der Daten (in List.html) die Daten noch manipulieren? Wenn ich zb. an jeden Namen etwas anhängen möchte...

$name = $name . " nur ein Test";
jenses ·

Das hier funktioniert auf jeden Fall:

    public function testDb() {
		$query = $this->createQuery();
		$query->statement( "SELECT title, uid, pid from pages GROUP BY pid" );
		$result = $query->execute(TRUE);  ### returnRawQueryResult:TRUE (default:false)
		\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump( $result, '$result in testSql' );
		die();
      }

Achtung: aufpassen, daß dir nicht die diversen Caches dazwischen funken!