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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!