SQl Frage mehrende Counts

  • Gute Abend Leute, ich stehe gerade auf dem Schlauch und weiß nicht wie ich aus diesen 2 SQL abfragen beide COUNT addieren kann.

    Gibt es ein Möglichkeit aus beiden query eine zu machen?
    Oder muss ich mit beiden leben und per php addieren.


    SQL
    SELECT anime.animeID, COUNT(tags.tagID) AS COUNT
    FROM anima1_anime anime
    LEFT JOIN wcf1_tag_to_object tags
    ON (anime.animeID = tags.objectID)
    WHERE tags.tagID IN (62,312,551,1834,3249,3754,4789,5750,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402) AND tags.objectTypeID = 2535 AND anime.animeID != 612 AND anime.isDeleted = 0 AND anime.isDisabled = 0
    GROUP BY anime.animeID
    ORDER BY COUNT DESC LIMIT 3
    animeID COUNT
    614 3
    469 3
    1963 2


    SQL
    SELECT anime.animeID, COUNT(genre.categoryID) AS COUNT
    FROM anima1_anime anime
    LEFT JOIN anima1_anime_to_genre genre
    ON (anime.animeID = genre.animeID)
    WHERE genre.categoryID IN (18,20,30,33) AND anime.animeID != 612 AND anime.isDeleted = 0 AND anime.isDisabled = 0
    GROUP BY anime.animeID
    ORDER BY COUNT DESC LIMIT 3


    animeID COUNT
    1884 4
    1880 4
    614 4



    Jetzt sollte draus dies werden.

    animeID COUNT
    614 7
    1884 4
    1880 4
    469 3
    1963 2
  • Du solltest nicht so verwirrende Namen benutzen. Was du hast sind COUNT(), nicht SUM() Werte, die dann SUM zu benennen ist wenig zielführend. Ich hab gerade eine ganze Weile dummdämlich da rauf rumgestarrt um rauszufinden, wo du denn nun zur Hölle summierst ;)


    Im Zweifel geht immer der Holzhammer:


    SQL
    SELECT
        tagCount,
        categoryCount
    FROM
    (<query1>) as tagCount,
    (<query2>) as categoryCount


    Aber ob sich das wirklich lohnt solltest du profilen, letzteres macht auch einen impliziten JOIN

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

  • Danke erstmal.


    habe den ersten beitrag mal überarbeitet.

    Dein Code Hilfe hat mir noch nicht geholfen evtl auch zu spät abends.


    Mein Lösungs ansatzt ist jetzt folgender

  • SQL
    SELECT anime.animeID, COUNT(tags.tagID) AS TAG_COUNT, COUNT(genre.categoryID) AS GENRE_COUNT, TAG_COUNT + GENRE_COUNT AS COUNT_TOTAL
    FROM anima1_anime anime
    LEFT JOIN wcf1_tag_to_object tags ON (anime.animeID = tags.objectID)
    LEFT JOIN anima1_anime_to_genre genre ON (anime.animeID = genre.animeID)
    WHERE genre.categoryID IN (18,20,30,33) AND anime.animeID != 612 AND anime.isDeleted = 0 AND anime.isDisabled = 0 AND tags.tagID IN (62,312,551,1834,3249,3754,4789,5750,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402) AND tags.objectTypeID = 2535
    GROUP BY anime.animeID
    ORDER BY COUNT_TOTAL DESC LIMIT 3

    Ungetestet, extrem hässlich und vermutlich nen performance Albtraum, aber wenn der Hammer nur groß genug ist kann man fast alles in einen Query quetschen :P

  • Habe jetzt eine zufriedenstellende Lösung gefunden.

    Werde isDeleted anderes prüfen da beim laden der IDs über einer xxxlist.class.php dies sowieso geprüft wird.