Zum Inhalt springen

SQL-Abfrage (Join)

Erstellt am 27. August 2007 · 9 Antworten · letzte Antwort am 27. August 2007

Tags: Frage

laser ·

Hallo,

ich will gerade eine SQL-Abfrage realisieren, ich mach das mit dieser "Funktion" hier:

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
                'f.*,k.name AS kname',
                $table . ' f LEFT JOIN ' . $table2 . ' k ON k.uid = ' . $value,
                'f.kategorie = ' . $value . ' AND f.deleted = "0" AND f.pid IN (' . $pid . ')'.
                  $this->cObj->enableFields($table),
                '',
                'f.firma ASC');

Irgendwie will mein JOIN nicht, oder hab ich da jetzt was total durcheinander bekommen? Bin kurz davor das mit einem normalen (mysql_query) Statement zu lösen 😃

Hab das mal mitn normalen probiert:

      foreach($catId AS $value) {
        $blub = mysql_query("
          SELECT
            f.*,
            k.name AS kname
          FROM
            $table f
            LEFT JOIN $table2 k ON k.uid = $value
          WHERE
            f.kategorie = $value
            AND
            f.deleted = 0
            AND
            f.pid IN ($pid)
          ORDER BY
            f.firma ASC
        ") Or die (mysql_error());
        return $this->getItem($blub);
      }

Der geht ..

laser ·

*doppelpost*

Hab das ganze jetzt so gelöst:

$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db,"
          SELECT
            f.*,
            k.name AS kname
          FROM
            $table1 f
            LEFT JOIN $table2 k ON k.uid = $value
          WHERE
            f.kategorie = $value
            AND
            f.deleted = 0
            AND
            f.pid IN ($pid)
          ORDER BY
            f.firma ASC
          ");
        $content .= $this->getItem($res);

Kann mir wer sagen ob das relativ sauber ist? Also sauber in Hinsicht auf TYPO3, muss ich noch irgendwas escapen oder passt das?

steffenk ·

Du kannst das schon mit dem DB-Wrapper machen, lass Dir einfach die fertige Query anzeigen:

t3lib_div::debug($GLOBALS['TYPO3_DB']->SELECTquery (
                'f.*,k.name AS kname',
                $table . ' f LEFT JOIN ' . $table2 . ' k ON k.uid = ' . $value,
                'f.kategorie = ' . $value . ' AND f.deleted = "0" AND f.pid IN (' . $pid . ')'.
                  $this->cObj->enableFields($table),
                '',
                'f.firma ASC'));
laser ·

Danke für die nette Debugging-Ausgabe, das Query scheint auch so zu stimmen aber trotzdem meckert er, ich versteh es nicht.

P.S. Es ist schon normal das am Anfang und am Ende ein | steht, oder?

laser ·

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/web65/html/cms/t3lib/class.t3lib_db.php on line 796

Das komische ist, das es nur bei diesem Query kommt, es kann also nicht am danach auszuführenden Code liegen, oder?

steffenk ·

aktivier im Installtool doch mal sqlDebug, dann siehst Du auch die Query die zum Fehler führt (und in welcher Funktion die aufgerufen wird).

steffenk ·

liefert die query denn ein Ergebnis im phpmyadmin?

//man, jetzt ist mein Bildschirm kaputt, nachdem ich mehrfach auf Dein Avatar gekloppt habe 😃

laser ·

Ich sagte ja das es über den andere Code, siehe Post 2, funktioniert. Falls du das meinst.

Hehe, das mein Haustier :p