COUNT + spezifisches WHERE

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • COUNT + spezifisches WHERE

    Hallo,

    ich habe folgendes Problem:

    Hier meine Abfrage
    PHP-Code:
    SELECT t1.nameCOUNT(t2.logid) AS anzahl
    FROM daten t1
    INNER JOIN log t2 ON t1
    .entryid t2.entryid
    GROUP BY t2
    .entryid 
    so, jetzt ist das Problem, dass in der log-Tabelle noch ein Modus mit angegeben wird: upload || download.
    Ich möchte mit COUNT jetzt aber nur alle Download-Logs erfassen!

    das kann ich aber nicht in die WHERE packen, denn dann zeigt er mir nicht heruntergeladene Einträge auch nicht mehr an.

    ist das überhaupt realisierbar oder stößt man da auf die Grenzen von MySQL?


    Vielen Dank für eure Hilfe

    gruß
    Lukas Schulze

  • #2
    Re: COUNT + spezifisches WHERE

    das kann ich aber nicht in die WHERE packen, denn dann zeigt er mir nicht heruntergeladene Einträge auch nicht mehr an.
    Verstehe ich leider nicht.
    Code:
    SELECT daten.name, COUNT(log.logid) AS anzahl
    FROM daten, log
    WHERE daten.entryid = log.entryid AND log.modus = 'download'
    GROUP BY log.entryid

    Kommentar


    • #3
      Hi,

      gerade eben, vor 30 Sekunden bin ich auch auf des Rätsels lösung gekommen!

      PHP-Code:
      ... INNER JOIN log t1 ON t1.entryid t2.entryid AND t2.modus 'download' ... 
      Vielen Dank trotzdem

      =========================

      Interessant! Wusste gar nicht, dass man die Tabellen durch ein Komma trennen und das INNER JOIN damit wegfallen lassen kann...

      Funktioniert das bei dir wie INNER JOIN oder wie LEFT JOIN?


      Vielen Dank nochmals

      gruß
      Lukas Schulze

      Kommentar


      • #4
        http://dev.mysql.com/doc/refman/5.1/en/join.html
        INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).
        Mit anderen Worten: Funktioniert wie INNER JOIN, allerdings entsteht bei meiner Variante ein größeres (maximales) Zwischenergebnis (das kartesische Produkt), dass dann durch die WHERE-Klausel eingeschränkt (verkleinert) wird. Bei deiner Variante wird nur ins Zwischenergebnis aufgenommen, was der JOIN-Condition genügt.

        Deine Variante ist also eigentlich vorzuziehen, da sie den DB-Server weniger belastet. Aber ein guter* Query Optimizer macht aus meinem Vorschlag sowieso in etwas das, was er auch aus deinem macht.

        * Nicht unbedingt der von MySQL.
        Zuletzt geändert von onemorenerd; 11.03.2006, 15:10.

        Kommentar

        Lädt...
        X