Das Abfragen von einzelnen Flexform-Werten per MySQL Statement ist genial einfach, wenn man die Funktion „ExtractValue“ verwendet. Damit kann man direkt auf einzelne XML Werte zugreifen und Abfragen damit erstellen.
Das ist das Beispiel-XML:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3FlexForms> <data> <sheet index="sDEF"> <language index="lDEF"> <field index="settings.title"> <value index="vDEF">Lorem Ipsum</value> </field> <field index="settings.details_link"> <value index="vDEF">233</value> </field> </language> </sheet> <sheet index="sTeaserBox"> <language index="lDEF"> <field index="settings.teaserBox_link"> <value index="vDEF">http://www.schmutt.com</value> </field> <field index="settings.teaserBox_buttontitel"> <value index="vDEF">Zur Homepage</value> </field> </language> </sheet>
Und dazu die MySQL Abfrage:
SELECT uid,pid,pi_flexform,ExtractValue(pi_flexform,'/T3FlexForms/data/sheet[@index="sTeaserBox"]/language/field[@index="settings.teaserBox_link"]/value') as val FROM `tt_content` WHERE pi_flexform LIKE '%settings.teaserBox_link%' ORDER by val desc
Die Funktion ExtractValue ist seit MySQL 5.1.5 verfügbar:
https://dev.mysql.com/doc/refman/5.1/en/xml-functions.html
Die Syntax dazu ist XPath – hier ein gutes Tutorial:
http://www.zvon.org/xxl/XPathTutorial/General_ger/examples.html