Zum Inhalt springen

Query Problem mit Where bei der Seiten ID

Erstellt am 23. Oktober 2008 · 6 Antworten · letzte Antwort am 24. Oktober 2008

Tags: PHP, Datenbank, Frage

ÁndreMansfeld ·

Hallo Freunde,
ich brauche einen kleinen Schubs in die richtige Richtung.
Ich frage so 2 Tabellen ab.

function TEAM(){
      $template = $this->cObj->getSubpart($this->templateCode,"###TEAM###");
      $queryParts['SELECT'] = 'a.*,b.*';
      $queryParts['FROM'] = 'tx_1865_main a,tx_1865_trainer b';
      $pidList = $this->pi_getPidList($this->cObj->data['pages'],$this->conf["recursive"]);
      $queryParts['WHERE'] = '$pidList'; // 'deleted=0 and hidden=0';

      $res =$GLOBALS['TYPO3_DB']->exec_SELECTquery($queryParts['SELECT'],$queryParts['FROM'],$queryParts['WHERE']);
                   
      $row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
      $markerArray['###KLASSE###']=$row['klasse'];
      ........
      }

Die Ausgabe erhalte ich auch schön brav. 😃
Was ich aber einfach nicht hinbekomme (in der T3 konformen Schreibweise mit exec_SELECTquery() ) ist, dass
1. DELETED und HIDDEN akzeptiert werden
2. das der Code für die PAGE ID nicht genommen wird. Zeile 6

Zu beiden Einträgen tx_1865_main a,tx_1865_trainer b mache ich die Eingaben in der gleichen PAGE ID.

Die Ausgabe sollte mir dann einfach nur zu der Mannschaft 1865 die dazugehörigen Trainer zeigen.
Die Tabelle tx_1865_main sind globale Daten zur Mannschaft
Die Tabelle tx_1865_trainer für die Trainerdaten.

In der alten Schreibweise mit

Select * from tx_1865_main,tx_1865_trainer Where deleted=0 and hidden=0 and PID IN ($pidList);

funktionierts :o
Wie ist den die richtige Syntax bei exec_SELECTquery()?

Lieben Gruß Andreas

ÁndreMansfeld ·

OK, das geht schonmal :-)
Ich dachte, wenn die WHERE identisch ist müßte ich sie nicht noch referenzieren!! :o
Hast du noch einen Tipp für die PID ID, denn da gehts nicht.
Also

and a.$pidList and b.$pidList

verursachen dann einen invalid SQL.

Danke und lieben Gruß
ANdreas

frohike ·

Hi,

$queryParts['WHERE'] = '$pidList'; // 'deleted=0 and hidden=0';

Fehler 1:
Wenn Du $pidList in einfache Hochkomma setzt, dann wird nicht der Wert für die Variable ersetzt. Möglich wäre

$queryParts['WHERE'] = "$pidList"; // $pidList wird durch den Wert der Variablen ersetzt

Besser jedoch

$queryParts['WHERE'] = $pidList;

Fehler 2:

$pidList = $this->pi_getPidList($this->cObj->data['pages'],$this->conf["recursive"]);

In $pidList steht sowas wie "40,41,42,49" (ohne den Anführungszeichen). Das passt so in keine Query.

Lösung:

$queryParts['WHERE'] = "a.pid in ($pidList) AND b.pid in ($pidList)";

Ergänzt um deleted und hidden:

$queryParts['WHERE'] = "a.pid in ($pidList) AND b.pid in ($pidList) AND a.hidden = 0 AND a.deleted = 0 AND b.hidden = 0 AND b.deleted = 0";

Damit sollte es gehen 🙂

Viel Erfolg
Markus

ÁndreMansfeld ·

Vielen Dank :-)
Auch das klappt jetzt, allerdings konnte ich nur eine Tabelle zuweisen. Das macht aber nichts, weil ich die Daten ja trotzdem angezeigt bekomme. Also aus

$queryParts['WHERE'] = "a.pid in ($pidList) AND b.pid in ($pidList) AND a.hidden = 0 AND a.deleted = 0 AND b.hidden = 0 AND b.deleted = 0";

hab ich

$queryParts['WHERE'] = "a.pid in ($pidList) AND a.hidden = 0 AND a.deleted = 0 AND b.hidden = 0 AND b.deleted = 0";

gemacht. also "AND b.pid in ($pidList)" weggelassen.

#paralyzed#

Super, damit auf gelöst!!!!!

Lieben Gruß
Andreas

steffenk ·

AND a.hidden = 0 AND a.deleted = 0 AND b.hidden = 0 AND b.deleted

Spätestens bei start/stop und Versionierung knallts dann: das reicht nicht!

Dafür gibts extra eine Funktion, die man auch benutzen sollte:

$queryParts['WHERE'] = '...' . $this->cObj->enableFields('tx_1865_main') . $this->cObj->enableFields('tx_1865_trainer');

mal abgesehen davon das Capitols ausschliesslich bei Konstanten genutzt werden.