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
... AND a.hidden = 0 AND a.deleted = 0 AND b.hidden = 0 AND b.deleted = 0
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
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
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
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.
Hallo steffenk,
Danke auch für deinen Support 😃
Ich werde es entsprechend anpassen.
Frohes Schaffen
Andreas