Mysql Abfrage Problem

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

  • Mysql Abfrage Problem

    Hi Forum,

    ich habe ein kleines Problem mit einer MySql Abfrage und hab mir jetzt schon stundenlang den Kopf zerbrochen, komme aber auf keine Lösung. Hoffe ihr könnt mir helfen. Eigentlich denke ich, ist mein Problem gar nicht so kompliziert aber ich bekomms nicht hin. Vlt. seh ich einfach nur den Wald vor lauter Bäumen nicht mehr. Es geht um folgendes:

    Ich habe zwei Tabellen:

    Tabelle1 beinhaltet alle verfassten Beiträge mit fest zugeordneter ID

    In Tabelle2 wird für jeden Benutzer eine neue Zeile für jeden von ihm gelesenen Beitrag angelegt.

    Code:
    [COLOR=#000000][COLOR=#006600]
    [/COLOR][COLOR=#CC0000]'Tab1'       'Tab2' [/COLOR][COLOR=#0000CC]
    [/COLOR][COLOR=#006600]+--+----+  +--+----+    
    |[/COLOR][COLOR=#0000CC]id[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]var1[/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]user[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]id[/COLOR][COLOR=#006600]|    [/COLOR][COLOR=#006600]
    +--+----+  +----+--+    
    | [/COLOR][COLOR=#0000CC]1[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][/COLOR][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#0000CC]222 [/COLOR][/COLOR][/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]1 [/COLOR][COLOR=#006600]|    [/COLOR][COLOR=#006600]
    | [/COLOR][COLOR=#0000CC]2[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]222 [/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]2 [/COLOR][COLOR=#006600]| 
    [/COLOR][/COLOR][COLOR=#000000][COLOR=#006600]| [/COLOR][COLOR=#0000CC]3[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]222 [/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]3 [/COLOR][COLOR=#006600]| [/COLOR][/COLOR]
    [COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600]| [/COLOR][COLOR=#0000CC]4[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]222 [/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]4 [/COLOR][COLOR=#006600]| [/COLOR][/COLOR]
    [/COLOR][/COLOR][COLOR=#000000][COLOR=#006600]| [/COLOR][COLOR=#0000CC]5[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]222 [/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]5 [/COLOR][COLOR=#006600]| [/COLOR][/COLOR]
    [COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600]| [/COLOR][COLOR=#0000CC]6[/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]... [/COLOR][COLOR=#006600]|  |[/COLOR][COLOR=#0000CC]333 [/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]1 [/COLOR][COLOR=#006600]|[/COLOR][/COLOR]
               [/COLOR][/COLOR][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600]|[/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#0000CC]333 [/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]4 [/COLOR][COLOR=#006600]|
               [/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600]|[/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#006600][COLOR=#000000][COLOR=#0000CC]333 [/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#006600]|[/COLOR][COLOR=#0000CC]5 [/COLOR][COLOR=#006600]|[/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][COLOR=#000000][COLOR=#006600]
                   [/COLOR][/COLOR]
    In dem Beispiel oben hat also user=222 Beitrag 1-5 gelesen. Beitrag 6 noch nicht.
    User=333 hat die Beiträge 1,4,5 gelesen und die Beiträge 2,3,6 noch nicht.
    Jetzt brauch ich eine Abfrage, die mir eben für user=222 nur ein Ergebnis liefe, nämlich Beitrag 6 und zu user=333 drei Ergebnisse nämlich Beiträge 2,3,6.

    Die Tabellen zu verknüpfen mit Joins bekomm ich hin und die umgekehrt Abfrage wäre ja einfach (skizziert):
    Code:
    Select id from tab2 where user = '$user_id'
    Aber wie kann ich diese Abfrage umkehren?? Ich habe ja kein Atribut was ich abfragen kann...


    Bin für jede Hilfe dankbar.

    Viele Grüße
    Philipp

  • #2
    Per korrelierter Subquery sollte das ganze ja recht trivial sein (zumindest für einen spezifischen User), und wenn es mit JOINs sein soll, liefert MySQL :: MySQL 5.0 Reference Manual :: 13.2.9.11 Rewriting Subqueries as Joins Ansätze.

    (Wenn du es damit nicht alleine hinbekommst, dann stelle bitte ein direkt testbares Beispiel als SQL Fiddle bereit.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hi wahsage,

      danke für deine Antwort. Hab es leider nicht hinbekommen
      Vielleicht hab ichs aber auch einfach nur nicht verstanden.

      Ich hab jetzt mal wie von dir vorgeschlagen ein SQL Fiddle erstellt und mal 2 Varianten die ich bereits probiert habe eingegeben.

      1.Variante: (mit subquery)
      Kommt nah ran, aber ich kann leider nicht nach user_id filtern lassen.

      2. Variante: (mit JOIN)
      Ich komm zwar hier an user_id ran, aber die Abfrage gibt leider alle Zeilen aus, sobald die ID's übereinstimmen. Eine Filterung nach "nicht vorhandensein" von user 333 bringt leider nichts...

      Was als Ergebnis der Abfrage für user_id=333 rauskommen sollte wäre:
      ID
      2
      3
      6


      Bin für jede Hilfe dankbar.

      Viele Grüße Philipp

      Kommentar


      • #4
        Na mit Subquery ist es ja einfach, wenn es nur für einen spezifischen User sein soll …

        Code:
        SELECT * FROM posts WHERE id NOT IN
                (SELECT article_id FROM posts_read WHERE user_id = 333)
        http://sqlfiddle.com/#!2/f7f413/4
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5


          Soooooo einfach ?? Klappt bestens!! Ich danke dir vielmals!!
          Hab ich einfach den Wald vor lauter Bäumen nicht mehr gesehen

          Kommentar

          Lädt...
          X