[Frage] Syntax für MySQL [Gelöst]

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    13. 09. 2013, 11:29

    Hallo zusammen,

    ich habe noch einmal eine Frage zu "voneinander abhängigen Select-Feldern" im Backend, genauer: Zur richtigen Syntax bei der Datenbankabfrage.

    Das eine Feld heißt "Berufsbezeichnung" und das andere heißt "Fachrichtung".
    Zuerst wird die Berufsbezeichung ausgewählt und davon abhängig ein Select-Feld gezeigt, das entsprechende Fachrichtungen anbietet.

    Hier der Teil des Codes aus der ext_tables.php zum besseren Verständnis:

    1. 'berufsbezeichnung' => array(
    2. 'label' => 'Berufsbezeichnung',
    3. 'config' => array(
    4. 'type' => 'select',
    5. 'items' => array(
    6. array('Bitte wählen…', 0),
    7. ),
    8. 'foreign_table' => 'tx_stellenliste_domain_model_beruf',
    9. 'maxitems' => 1
    10. )
    11. ),

    1. 'fachrichtung' => array(
    2. 'label' => 'Fachrichtung',
    3. 'displayCond' => 'FIELD:berufsbezeichnung:!=:0',
    4. 'config' => array(
    5. 'type' => 'select',
    6. 'items' => array(
    7. array('Bitte wählen…', 0),
    8. ),
    9. 'foreign_table' => 'tx_stellenliste_domain_model_fachrichtung',
    10. 'foreign_table_where' => 'AND tx_stellenliste_domain_model_fachrichtung.klickweg LIKE %###REC_FIELD_berufsbezeichnung###%',
    11. 'maxitems' => 1
    12. )
    13. ),

    Für jeden Eintrag wird einer Berufsbezeichnung genau eine Fachrichtung zugeordnet. Welche Fachrichtung in Frage kommt (und entsprechend im Select-Feld angezeigt wird), wird in der Tabelle "tx_stellenliste_domain_model_fachrichtung" als kommaseparierte Liste gespeichert (z.B. "1,2,3,4,5" ). Die Fachrichtungen können also jeweils einigen, aber nicht allen Berufsbezeichnungen zugeordnet werden.

    Wie ist nun die richtige Syntax, um abzufragen, ob die Berufsbezeichnung in der Liste der Fachrichtungen auftaucht?

    1. 'foreign_table_where' => 'AND tx_stellenliste_domain_model_fachrichtung.klickweg LIKE %###REC_FIELD_berufsbezeichnung###%',

    Wenn ich das richtig sehe, ist die Zusammensetzung %###REC_FIELD_berufsbezeichnung###% nicht korrekt. Es funktioniert ohne %, wenn nur ein Wert in dem abzufragenden Feld steht. Es funktioniert auch mit %, wenn eine statische Zahl statt einer Variable eingesetzt ist. Nur zusammen nicht.
    Ich würde mich sehr freuen, wenn mir da jemand weiterhelfen könnte.

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    13. 09. 2013, 18:04 - Lösung

    Ich habe die Lösung dann doch noch selber gefunden. Die Vermutung war richtig; die Syntax war falsch. Richtig sieht es jetzt so aus:

    1. 'foreign_table_where' => 'AND tx_stellenliste_domain_model_fachrichtungen.klickweg LIKE CONCAT("%", ###REC_FIELD_berufsbezeichnung###, "%")',

    Vielleicht hilft es ja jemandem.


  • 1
  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    13. 09. 2013, 18:04

    Ich habe die Lösung dann doch noch selber gefunden. Die Vermutung war richtig; die Syntax war falsch. Richtig sieht es jetzt so aus:

    1. 'foreign_table_where' => 'AND tx_stellenliste_domain_model_fachrichtungen.klickweg LIKE CONCAT("%", ###REC_FIELD_berufsbezeichnung###, "%")',

    Vielleicht hilft es ja jemandem.

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    13. 09. 2013, 20:12

    Kommaseparierte Listen sind eigentlich eine eher schlechte Lösung besser wäre eine MM Tabelle. Zumindest solltest Du lieber ein "AND ###REC_FIELD_berufsbezeichnung### IN tx_stellenliste_domain_model_fachrichtungen.klickweg" benutzen wenn das funktioniert... Denn deine Query wird nicht mehr funktionieren wenn die IDs zweistellig werden, denn wenn
    tx_stellenliste_domain_model_fachrichtungen.klickweg = 2,10 dann würde LIKE %1% auch zutreffen...

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    16. 09. 2013, 11:29

    Danke für die Rückmeldung. Ich habe folgendes mal ausprobiert, aber so bekomme ich eine Fehlermeldung. Bei meiner Anwendung sind die IDs zum Glück nur einstellig. Werd mich mit der MM Tabelllen-Alternative aber einmal auseinandersetzen. Das scheint nachhaltiger.

    1. 'fachrichtung' => array(
    2. 'label' => 'Fachrichtung',
    3. 'displayCond' => 'FIELD:berufsbezeichnung:!=:0',
    4. 'config' => array(
    5. 'type' => 'select',
    6. 'items' => array(
    7. array('Bitte wählen…', 0),
    8. ),
    9. 'foreign_table' => 'tx_stellenliste_domain_model_fachrichtungen',
    10. 'foreign_table_where' => 'AND ###REC_FIELD_berufsbezeichnung### IN tx_stellenliste_domain_model_fachrichtungen.klickweg',
    11. 'maxitems' => 1
    12. )
    13. ),

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    20. 09. 2013, 16:04

    Ich habe das Ganze jetzt einmal mit MM Tabellen versucht:

    1. 'berufsbezeichnung' => array(
    2. 'exclude' => 0,
    3. 'label' => 'LLL:EXT:acstellenliste/Resources/Private/Language/locallang_db.xlf:tx_acstellenliste_domain_model_stellen.berufsbezeichnung',
    4. 'config' => array(
    5. 'type' => 'select',
    6. 'foreign_table' => 'tx_acstellenliste_domain_model_berufsbezeichnungen',
    7. 'minitems' => 0,
    8. 'maxitems' => 1,
    9. ),
    10. ),

    1. 'fachrichtung' => array(
    2. 'exclude' => 0,
    3. 'label' => 'LLL:EXT:acstellenliste/Resources/Private/Language/locallang_db.xlf:tx_acstellenliste_domain_model_stellen.fachrichtung',
    4. 'config' => array(
    5. 'type' => 'select',
    6. 'foreign_table' => 'tx_acstellenliste_domain_model_fachrichtungen',
    7. 'MM' => 'tx_acstellenliste_berufsbezeichnungen_fachrichtungen_mm',
    8. 'minitems' => 0,
    9. 'maxitems' => 1,
    10. ),
    11. ),

    Aber leider funktioniert das nicht wie es soll. Es werden einfach alle Einträge der Liste gezeigt. Liegt es daran, dass das Ganze in der TCA/Stellen.php Datei liegt? Andere Felder mit MM Tabellen, die sich auf z.B.

    1. 'MM' => 'tx_acstellenliste_stellen_erfahrungensonderbereiche_mm',

    beziehen, funktionieren. Was mache ich da falsch?

  • 1