[Frage] Wie einfache Datenbankabfrage in extbase (SELECT name FROM ...) machen? TYPO3-Version: -

  • marion-j marion-j
    Jedi-Ritter
    0 x
    139 Beiträge
    2 Hilfreiche Beiträge
    19. 07. 2016, 14:40

    Hallo,

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

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

    Aber wie erstelle ich eine einfache Abfrage wie folgende:

    1. SELECT name FROM tabelle GROUP BY name

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


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    20. 07. 2016, 08:01

    Zitiert von: marion-j

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

    http://lobacher.de/
    -> Download: "NEU TYPO3 CMS Extbase & Fluid Cheatsheet"

  • marion-j marion-j
    Jedi-Ritter
    0 x
    139 Beiträge
    2 Hilfreiche Beiträge
    20. 07. 2016, 09:46

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

    1. public function testDb() {
    2. $query = $this->createQuery();
    3. $query->matching($query->name);
    4. return $query->execute();
    5. }

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

    1. $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.

    1. $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...

    1. $name = $name . " nur ein Test";

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    21. 07. 2016, 09:43

    Das hier funktioniert auf jeden Fall:

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

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

  • marion-j marion-j
    Jedi-Ritter
    0 x
    139 Beiträge
    2 Hilfreiche Beiträge
    22. 07. 2016, 08:59

    Vielen Dank jenses,
    so funktioniert es :-)
    Entscheidend ist anscheinend das [b]TRUE[/b] im execute.

  • 1