Abfrage aus 2 Tabellen umkehren

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

  • Abfrage aus 2 Tabellen umkehren

    Hi,

    Ich habe folgendes Problem:

    Ich habe die 2 Tabellen:
    kampagne (id, sperre, ...)
    stats (id, kampagnen_id, user, datum)

    Wenn Ein User an einer Kampagne teilnimmt wird das in die tabelle Stats eingetragen.

    Nachdem ein User an einer Kampagne teilgenommen hat, wird er für kampagne.sperre Stunden für diese Kampagne gesperrt.

    Jetzt möchte ich alle Kampagnen ausgeben lassen, bei denen ein bestimmter User NICHT gesperrt ist.

    Das problem ist, dass ich die Tabellen nicht so einfach verknüpfen kann, da auch die User, die bisher an keiner Kampagne teilgenommen haben - und somit in der Tabelle stats noch garnicht vorkommen - angezeigt werden sollen!

    Ich habe es bisher nur geschafft alle kampagnen anzuzeigen, bei denen der User gesperrt ist.
    jetzt müsste ich das ergebnis nurnoch umkehren...

    Hier der Code:
    PHP-Code:
    SELECT kampagne.id as id
    FROM kampagne
    ,  stats
    WHERE
    DATE_SUB
    (NOW(), INTERVAL kampagne.sperre HOUR) < stats.datum 
    AND
    kampagne.id stats.kampagnen_id
    AND
    stats.user 'user'
    GROUP BY kampagne.ID
    Jetzt müsste ich das nurnoch 'umkehren'...
    mit subqueries würde das kein Problem sein, da meine MYSQL Version das aber nicht unterstützt brauche ich eine andere Lösung...


    MfG
    ScaraX
    Zuletzt geändert von ScaraX; 05.02.2006, 21:50.

  • #2
    Etwas Aussagenlogik: zu WHERE x AND y AND z ist das Komplement WHERE NOT x OR NOT y OR NOT z.

    Aber MySQL kann dir Usernamen nicht ausgeben, wenn diese nirgendwo stehen (weil sie noch keine Kampagne haben). Dazu brauchst du noch eine Tabelle mit allen Usernamen. Klar, oder?

    Kommentar


    • #3
      Original geschrieben von onemorenerd
      Etwas Aussagenlogik: zu WHERE x AND y AND z ist das Komplement WHERE NOT x OR NOT y OR NOT z.
      Das ist mir schon klar, aber so einfach funktioniert das hier ja nicht...

      Die Tabelle stats könnte z.B so aussehen:
      id user datum kampagnen_id
      1 xyz 2006-02-01 1
      2 xyz 2006-02-02 2
      3 xyz 2006-02-03 2
      4 xyz 2006-02-06 4
      5 xyz 2006-02-06 2
      6 xyz 2006-02-06 3

      in der Tabelle Stats kann ja der User xyz bei der kampagne 123 mehrmals vorkommen, aber er ist z.B nur einmal gesperrt, da die anderen male schon längere Zeit zurückliegen...
      wenn sie sperre z.B bei allen kampagnen 24 std dauert würde man mit dem query im ersten beitrag (ohne Group by) folgendes erhalten:
      ID Kampagnen-ID
      4 4
      5 2
      6 3

      Wenn man das aber einfach umkehrt erhält man
      1 1
      2 2
      3 2

      Ich möchte aber sowas wie
      1 1
      erhalten, da das die einzige kampagne ist, an der user xyz innerhalb der letzten 24 std nicht teilgenommen hat...und zusätzlich noch alle anderen kampagnen, die hier garnicht aufgelistet sind, z.B 5,6,7 usw...

      Aber MySQL kann dir Usernamen nicht ausgeben, wenn diese nirgendwo stehen (weil sie noch keine Kampagne haben). Dazu brauchst du noch eine Tabelle mit allen Usernamen. Klar, oder?
      Ich habe eine Tabelle mit den Usernamen, aber die nützt doch nichts in diesem Zusammenhang...

      Ich hab mir da schon Stundenlang gedanken drüber gemacht, aber die einzige Lösung, die funktionieren könnte, ist mit einem subquerie, aber das funktioniert leider mit meiner MySQL Version nicht

      Ich hoffe jemand findet eine lösung...

      MfG
      ScaraX
      Zuletzt geändert von ScaraX; 06.02.2006, 01:49.

      Kommentar

      Lädt...
      X