Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SELECT mit MAX(Datum) und LEFT JOIN

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SELECT mit MAX(Datum) und LEFT JOIN

    Hallo,

    ich schreibe mir gerade einen kleinen Counter und mit einer Abfrage habe ich ein Problem:

    PHP-Code:
    SELECT
    counter
    .counter_id,
    MAX(counter.counter_request_time) AS counter_request_time,
    counter.counter_http_referer,
    counter_ip.counter_ip_remote_addr
    FROM 
    AS counter
    LEFT JOIN counter_ip ON counter
    .counter_id counter_ip.counter_ip_id
    WHERE counter_ip
    .counter_ip_remote_addr '...'
    GROUP BY counter_ip.counter_ip_remote_addr 

    Tabelle "counter"
    1 2014-10-19 21:07:41 localhost Chrome
    2 2014-10-19 21:08:05 localhost Chrome


    Tabelle "counter_ip"
    1 129.05....
    2 129.05....


    In der obigen Abfrage werden leider nicht die richtigen Datensätze miteinander verbunden.
    Hier das Ergebnis (also die falsche id von counter.counter_id, da müsste ja 2 stehen):
    1 2014-10-19 21:08:05 localhost ::1

    Diese Änderung bringt leider auch nicht den gewünschten Erfolg.
    FROM (SELECT * FROM counter ORDER BY counter.counter_request_time DESC) AS counter

    Wäre für einen Tipp sehr dankbar.
    Man friert nur, wenn man glaubt, einem sei kalt


  • #2
    Ahoi,

    die ID 2 steht nicht im Ergebnis, weil er den Datensatz mit ID 1 als Ergebnis bekommt und ihn mit dem größten DateTime-Wert anzeigt, so wie es in deiner Abfrage steht.
    Du musst die Abfrage an das Größte Datum schon in die Where-Klausel aufnehmen.
    ------
    Grüße Manü

    Kommentar


    • #3
      Hm, bekomm ich nicht hin, irgendwie hab ich wohl nen Denkfehler.
      Im Prinzip will ich alles aus der Tabelle "counter" mit dem jüngsten Datum der dazugehörigen IP-Adresse aus der Tabelle "counter_ip" auslesen.

      PHP-Code:
      SELECT 
      counter
      .counter_id
      counter.counter_request_time,
      counter.counter_http_referer
      counter_ip.counter_ip_remote_addr 
      FROM counter 
      LEFT JOIN counter_ip ON counter
      .counter_id counter_ip.counter_ip_id
      WHERE counter
      .counter_request_time = (SELECT MAX(counter.counter_request_timeFROM counter WHERE counter.counter_id counter_ip.counter_ip_id)
      GROUP BY counter_ip.counter_ip_remote_addr 
      Man friert nur, wenn man glaubt, einem sei kalt

      Kommentar


      • #4
        Das mit deiner ID-Abfrage in der Sub-Select dürfte da Probleme machen ... du müsstest die ID eher aus der Main-Select bekommen.
        Schau mal ob du hier was findest.
        http://stackoverflow.com/questions/7...ect-by-maxdate
        ------
        Grüße Manü

        Kommentar


        • #5
          Hey, ja so gehts:

          PHP-Code:
          SELECT
          counter
          .counter_id,
          counter.counter_request_time,
          counter.counter_http_referer,
          counter.counter_http_user_agent,
          counter_ip.counter_remote_addr
          FROM counter
          LEFT JOIN counter_ip ON counter_ip
          .counter_ip_id counter.counter_id
          WHERE counter
          .counter_request_time = (
              
          SELECT MAX(counter.counter_request_time)
              
          FROM counter
              LEFT JOIN counter_ip ON counter_ip
          .counter_ip_id counter.counter_id
              WHERE counter_ip
          .counter_remote_addr '$_SERVER[REMOTE_ADDR]'

          Danke für dein Hilfe, wieder was gelernt, so hatte ich das noch nie gemaxcht.
          Man friert nur, wenn man glaubt, einem sei kalt

          Kommentar

          Lädt...
          X