Zum Inhalt springen

sql having in typoscript

Erstellt am 19. August 2012 · 5 Antworten · letzte Antwort am 19. August 2012

Tags: Frage

xlarge74 ·

hallo

wie geht man denn mit einer having-clause in typoscript um?
oder wie bekommt man sonst ein count(*) =xxx unter ?

xlarge74 ·

das ist mein code ... vielleicht gits ja andere probleme, die ich jetzt so nicht sehe.

     30=COA
      30{
        10 = CONTENT
        10{
          table = tt_news
          select{
            pidInList =46
            where.data = GP:tx_ttnews|cat
            where.wrap = uid_foreign in (|)
            join = tt_news_cat_mm ON (tt_news_cat_mm.uid_local = tt_news.uid)
            andWhere.data = GP:cnt
            andWhere.wrap = having count(*)=|
            groupBy = title
            orderBy = title
          }
          renderObj = COA
          renderObj{
            10 = TEXT
            10{
              field = title
              dataWrap =
              insertData = 1
              wrap = |<br>
            }
          }
        }
      }
LuP ·

Hallo,

ich kann nicht ganz nachvollziehen, was Du mit dem SELECT bezwecken willst. Vor welchem Hintergrund hast Du den zusätzlichen GP-Parameter cnt eingeführt und warum willst Du gruppieren? Wenn Du erklären würdest, was Du mit dem ganzen ausgeben möchtest, könnte ich vielleicht einen Ansatz finden.

Kleiner Hinweis am Rande: bei GROUP BY macht es nur Sinn - wenn Du hinter SELECT nur Spalten hast, die entweder in der Gruppierung stehen oder Aggregatfunktionen sind.

VG,
LuP

xlarge74 ·
LuP schrieb

Hallo,

ich kann nicht ganz nachvollziehen, was Du mit dem SELECT bezwecken willst. Vor welchem Hintergrund hast Du den zusätzlichen GP-Parameter cnt eingeführt und warum willst Du gruppieren? Wenn Du erklären würdest, was Du mit dem ganzen ausgeben möchtest, könnte ich vielleicht einen Ansatz finden.

Kleiner Hinweis am Rande: bei GROUP BY macht es nur Sinn - wenn Du hinter SELECT nur Spalten hast, die entweder in der Gruppierung stehen oder Aggregatfunktionen sind.

VG,
LuP

hallo
danke erstmal, dass du zeit investierst...

um ein wenig auszuholen, ich hab für tt_news einen filter selbstgebaut mit javascript und typoscript .... jetzt funktioniert der categoryMode 2 (UND verknüpfung) nicht bei tt_news, dieser bug liegt schon seit version 3.0.1 vor und wird nicht gefixed :-( .... somit habe ich mir ein sql selbstgeschrieben mit direktem zugriff auf die db ohne das plugin bei der ansicht mit der UND verknüpfung ..

kurzes beispiel ....
meine news heissen "übungen"
es gibt 4 hauptkategorien mit jeder menge childs
ich habe jetzt pro hauptkategorie einen filter ...

die übung xyz hat sub1 sub5 und sub6 zugeordnet

wenn ich jetzt sub1 sub5 und sub 6 auswähle .. soll er nur übungen anzeigen, die wirklich diese 3 hauptkategorien haben(hier liegt das prob bei categoryMode 2, diese macht ODER verknüpfungen, zeigt also alle übungen an, die zumindest eine der subs hat) ...

zu meinem sql statement

SELECT * FROM `tt_news` join tt_news_cat_mm on uid = uid_local where uid_foreign in (array1)  group by title having count(*) =cnt

da ich in javascript bereits die ausgewählten kategorien in den url übergebe nehme ich diese her lege sie in

uid_foreign in (array1)

(ich weiß, dass auch hier ODER verknüpft wird) und lasse mir die übungen ausgeben, welche zu den kategorien passen .... hier kommt natürlich jede übung mit jeder zugeordneten kategorie als record ...deswegen das group by und zu guter letzt die aggregratsfuktion having bekommt von javascript ebenfalls über den url die anzahl der ausgewählten kategorien übergeben.... somit sage ich dem sql statement, dass er nur solche titel anzeigen soll, die alle kategorien zugeordnet haben..
grundsätzlich kann ich sql und weiß nur nicht wie das in typoscript realisieren soll ... natürlich denk ich auch oft sehr kompliziert, deswegen kann es sein, dass es eine einfachere lösung gibt

wenns zu kompliziert war, frag einfach nach bitte ;-)

select.docx
48kB
LuP ·

OK, vielen Dank für die ausführlichen Erklärungen.

Die HAVING-Klausel wird leider nicht direkt unterstützt, aber Du könntest versuchen, sie mittels stdWrap in groupBy zu injizieren:

    groupBy.data = GP:cnt
    groupBy.wrap = title HAVING count(*) = |

VG,
LuP