Hallo,
ich habe ein Problem mit einem DB Select per Typoscript grenzt schon fast an ratlosigkeit.
Und zwar habe ich folgende kleine Abfrage:
31 = CONTENT
31 {
table = tx_cal_event
select {
selectFields = title
max = 1
where uid = 1
}
}
31.renderObj = COA
31.renderObj {
wrap = |
1 = TEXT
1.htmlSpecialChars = 1
1.field = title
}
Jedenfalls bekomme ich keinerlei Werte zurückgegeben und vernünftig debuggen, das man sich z.b. die SQL Abfrage anzeigen lassen kann, habe ich auch nicht entdeckt.
Weiß jemand rat?
- Paul
Zeile 7 ist doppelt fehlerhaft.
Die korrekte Syntax wäre: where = uid = 1.
Daraus entsteht dann aber ein komisches SQL-statement.. besser wäre select.uidInList = 1... das where kann dann komplett raus.
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Select.html
Das mit dem '=' ist mir dann auch aufgefallen.
Leider hat es keinerlei Verbesserung ergeben :/
Ich würde mal darauf tippen, das Einträge gesucht werden, die auf der aktuellen Seite hinterlegt sind und das das Problem ist.
Debuggen: Stelle den Wert für im Install-Tool für das MySQL-Debugging einsprechend ein ( nur Fehlerhafte anzeigen ) und mach deine Query absichtlich kaputt ODER
Debugge alle und Bau in die Query etwas ein das sich leicht mit der Browsersuche finden lässt ( andWhere = 666=666 )
Danke für den sehr wertvollen tip.
Tatsächlich schaut die Query folgendermaßen aus:
SELECT title, tx_cal_event.uid as uid, tx_cal_event.pid as pid, tx_cal_event.t3ver_state as t3ver_state FROM tx_cal_event WHERE tx_cal_event.uid=1 AND tx_cal_event.pid IN (196) AND tx_cal_event.deleted=0 AND tx_cal_event.t3ver_state<=0 AND tx_cal_event.pid<>-1 AND tx_cal_event.hidden=0 AND tx_cal_event.starttime<=1429261740 AND (tx_cal_event.endtime=0 OR tx_cal_event.endtime>1429261740)
dieser Teil ist der das wohl verhindert was ich möchte:
AND tx_cal_event.pid IN (196)
Frage jetzt. Wie kann ich das verhindern? Kann man keine 100%ige Custom Query machen? :/
pid ist hier immer die Id der aktuellen Seite.
Wenn deine Einträge eine Storage-Seite haben kannst zu z.b. mit
...
select {
pidInList = 123
}
diese Id verwenden.
Alternativ kannst du mit
select {
pidInList.cObject = TEXT
pidInList.cObject {
}
}
das cObject von pidInList überschreiben, vorrausgesetzt das hilft dir weiter 😛
Tausend dank.
Hier mal mein gesamter funktionierender Code
30 = CONTENT
30 {
table = tx_cal_event
select {
selectFields=title
pidInList.cObject = TEXT
pidInList.cObject.value = 191
where.insertData=1
where.wrap = l18n_parent = |
where.data = GP:tx_cal_controller|uid
}
renderObj = COA
renderObj {
stdWrap.if.isTrue.data = GP:tx_cal_controller|uid
wrap = <a href="#">|</a>
1 = TEXT
1.htmlSpecialChars = 1
1.field = title
}
}