Abfrage mit 2 COUNT()

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

  • Abfrage mit 2 COUNT()

    hi, ich hab schon wieder eine frage zu meinem berechtigungssystem.

    Code:
    CREATE TABLE `user_login_failure` (
      `login_name` varchar(20) NOT NULL default '',
      `ip` varchar(39) NOT NULL default '',
      `timestamp` int(10) NOT NULL default '0'
    )
    in dieser tabelle werden alle fehllogins gespeichert.
    jetzt wollte ich abfragen:

    1) die anzahl und den letzten timestamp zu einem benutzer
    PHP-Code:
    $sql="SELECT
    COUNT(`login_name`), MAX(`timestamp`)
    from `user_login_failure`
    WHERE `login_name`='user'"

    2) die anzahl und den letzten timestamp zu einer ip
    PHP-Code:
    $sql="SELECT
    COUNT(`ip`), MAX(`timestamp`)
    from `user_login_failure`
    WHERE `ip`='127.0.0.1'"

    also mit zwei queries, kein problem.
    kann ich das gewünschte ergebnis aber auch mit nur einer query herausbekommen?

    [edit]
    sorry, wollte es eigentlich unter sql / db posten.
    Zuletzt geändert von 3DMax; 07.09.2006, 01:15.

  • #2
    Frage beide Bedingungen OR-verknüpft ab
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ja, hab ich auch schon versucht:
      PHP-Code:
      $sql="SELECT
      COUNT(`login_name`), COUNT(`ip`), MAX(`timestamp`)
      from `user_login_failure`
      WHERE `login_name`='user'
      OR `ip`='127.0.0.1'"

      problem ist nur, beide count-werte sind gleich und die summe (von login_name und ips) und als timestamp bekomme ich auch nur den max-wert von beiden

      mit GROUP BY habe ich auch schon experimentiert - ohne erfolg.

      Kommentar


      • #4
        Da du keine Gruppierung angibst, würde dir ein weniger tolerantes System als MySQL das sowieso gleich um die Ohren hauen - MySQL gruppiert stattdessen implizit.

        Nach den zwei gewünschten Eigenschaften Name und IP gleichzeitig in einer Query sinnvoll zu gruppieren erscheint mir aber nicht möglich.


        Wenn nur eine Query abgesetzt und ausgewertet werden soll, dann evtl. noch per UNION oder SUBSELECT - aber ob du damit performanter fährst, wage ich auch noch zu bezweifeln.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          ok, dann mache ich zwei abfragen.

          Original geschrieben von wahsaga
          Da du keine Gruppierung angibst, würde dir ein weniger tolerantes System als MySQL das sowieso gleich um die Ohren hauen - MySQL gruppiert stattdessen implizit.
          du meinst also, aus kompatibilitätsgründen grundsätzlich ORDER BY anzuwenden.

          aber wonach gruppieren? ich habe mal in meinem ersten beispiel der reihe nach ein ORDER BY nach allen tabellenspalten hinzugefügt. das result war immer gleich - ist es egal, wonach ich gruppiere?

          [edit]quatsch, GROUP BY muss ich ja verwenden.
          da funktioniert anscheinend nur "GROUP BY `login_name`" - so richtig?
          Zuletzt geändert von 3DMax; 07.09.2006, 15:59.

          Kommentar

          Lädt...
          X