Hallo zusammen,
ich versuche, im "where-Abschnitt" einer Select-Anweisung eine übergebene GET-Variable mit einem Datenbankfeld zu vergleichen.
Die GET-Variable beinhaltet eine Jahreszahl (vierstellig) und soll mit dem Datenbankfeld "datetime", das ein Datum im Timestamp-Format enthält, verglichen werden.
Daher müsste ja auf das Datenbankfeld zuvor ein strftime angewendet werden, damit beide Felder vergleichbar werden.
Nur wie baue ich dies in die where-Klausel ein?
Verschiedene Ansätze scheiterten. Es muss irgendwie in der Art funktionieren:
select.where = GPvar:tx_ttnews|year = strftime(datetime)
bzw. mit addWhere:
select.addWhere.dataWrap = GPvar:tx_ttnews|year = strftime(datetime)
Leider tut sich nix.
Wie lässt sich denn die strftime-Funktion entsprechend nutzen? Geht das überhaupt in der where-Klausel? Muss das evtl. an anderer Stelle geschehen?
Im darauffolgenden renderObj kann ich das vermutlich wohl nicht machen, da hier der Vergleich schon stattgefunden haben muss.
Bin mal wieder rat- und planlos. Hoffe Ihr habt einen Tipp für mich.
Eddy
Ich bin mir gerade nicht sicher, ob man in der where clause auch cObject nutzen kann. Falls ja, kannst du den GET Parameter umwandelt. Falls nein musst du dir wohl mit PHP aushelfen...
Danke für den Hinweis. Leider muss ich das datetime-Feld anpassen, welches dann in jedem Datensatz mit dem GET Parameter verglichen werden muss.
Ehrlich gesagt befürchte ich aber auch, um PHP nicht drumherumzukommen, obwohl ich es sehr gerne mit Typoscript gelöst hätte. #paralyzed#
MySql selbst kann auch eine Umwandlung vornehmen vielleicht dann eher in diese Richtung.
andWhere.dataWrap = {GPvar:tx_ttnews|year} = DATE_FORMAT(tt_news.datetime, '%Y');
und nebenbei, andWhere nicht addWhere 😉
P.S. die Zeit Format Angaben unterscheiden sich wohl ein bisschen zu strftime
http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html#id3618375
Hallo karlchen,
das wäre es natürlich gewesen. Eine einfache und elegante Lösung. Leider zieht es nicht und es werden keine Datensätze gefunden. Habe schon am Ausdruck selber etwas experimentiert mit/ohne Hochkomma usw. leider ohne Erfolg.
Wie einprägsam.net schon schrieb werde ich mich wohl mit einer php-Lösung anfreunden müssen 😉
und es geht doch 😃
ich habe gerade auch mal ein bisschen rumprobiert und habe bei mir noch einen Fehler gefunden, DATE_FORMAT erwartet ein Datum und keinen Timestamp...
So funktioniert es bei mir gerade
10=CONTENT
10{
wrap = <ul>|</ul>
table = tt_news
select{
// auf dieser Seite liegen die tt_news Datensätze
pidInList = 151
orderBy = datetime Desc
languageField = sys_language_uid
selectFields = datetime,title,uid
andWhere.data = GPvar:tx_ttnews|year
andWhere.intval = 1
// standardwert falls keine tx_ttnews|year übergeben wird
// um mysql Errors zu vermeiden
andWhere.stdWrap.outerWrap.wrap = 2009 |
andWhere.stdWrap.outerWrap.if{
isFalse.data = GPvar:tx_ttnews|year
}
andWhere.wrap = | = FROM_UNIXTIME(tt_news.datetime, '%Y')
}
renderObj = COA
renderObj{
20 = TEXT
20{
outerWrap = <li>|</li>
field = title
// auf diese Seite wird verlinkt (tt_news singleView)
typolink.parameter = 112
typolink.additionalParams.dataWrap = &tx_ttnews[tt_news]={field:uid}
}
}
}
TypoScript ist doch einfach goil 😃
Hallo karlchen,
saubere Arbeit - Respekt 🙂
Der übergebene GET-Parameter wird entsprechend ausgewertet und es wird eine Ergebnisliste ausgespuckt.
Ich muss nun zusätzlich noch diese Ergebnisse einschränken mit
archivedate < {date:U}
also irgendwie hineinwrappen. Mit einem einfachen "where" komme ich nicht weiter. Ich verbiege mir hier gerade einen mit diversen andWhere.stdWrap-Konstruktionen, komme jedoch auf keinen grünen Zweig.
Hast Du evtl. einen Tipp, wie ich das da noch hineinwursteln kann?
Eddy