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