MySQL abfrage ob <> oder = gleich?!

Malaxo

Erfahrenes Mitglied
Hey Leute die MySQL antwort auf meine abfrage "verar**********" mich doch :suspekt:

Ich prüfe in 2 Tabellen

1. Tabelle(kategorie)Diese Tabelle enthält 3 Themen:
ID_thema
beschreibung
quelle
verfuegbarkeit
link

2. Tabelle(zustellen)Diese Tabelle hat für jeden user (wen nötig) die entsprechenden themen:
id_pseudonym
id_thema (<- fremdschlüssel zu kategorie mit primärschlüssel ID_THEMA)

meine abfrage nun:

HTML:
select distinct k.* from kategorie AS k, zustellen As z WHERE z.id_pseudonym = 3 AND z.id_thema <> k.id_thema AND k.verfuegbarkeit = 'waehlbar'

der user mit der ID 3 hat 2 Themen die in der Zustellen tabelle verankert ist da sollte er mir jetzt mit dieser abfrage ja gar nichts anzeigen!

Mach ich statt <> ein =
HTML:
select distinct k.* from kategorie AS k, zustellen As z WHERE z.id_pseudonym = 3 AND z.id_thema = k.id_thema AND k.verfuegbarkeit = 'waehlbar'
änderet das nichts bei User 3 bzw. den User die schon beide Themen haben.

User 5, jedoch hat nur 1 Thema und dort wird das ensprechende Thema gefunden, das er NICHT hat bzw. HAT(in dem 2 beispiel mit "=" )

Wo könnte der fehler sein?

Ich hab alles aufgezeichnet und überprüft werde nicht schlau.
 
Ich verstehe zwar gerade nicht, worauf du hinaus willst, aber hast du schon mal einen Join probiert:
Code:
SELECT DISTINCT
        `k`.*
  FROM
        `kategorie` AS `k`
  INNER JOIN
        `zustellen` AS `z` USING( `id_thema` )
  WHERE
        `z`.`id_pseudonym` = 3
    AND `k`.`verfuegbarkeit` = 'waehlbar'
 
Hm... Also ich sollte aus der Tabelle "Kategorie" alles auswählen was NICHT in der Tabelle "zustellen" die selbe ID hat.

Wen der User 2 Themen hat die ihm zugeschriben werden in der Tabelle "zustellen" so müsste es mir NICHTS ausgeben.
Wenn der User nur 1 Thema hat soll es mir das Thema ausgeben welches in der Tabelle "kategorie" NICHT hat.

Natürlich müsste es auch mit mehreren Themen funktionieren nicht nur mit 2.

Es soll mir einfach aus der "Kategorie" die Themen ausgeben die NICHT schon in der Tabelle "zustellen" die selbe ID haben.

Daher hab ich versucht zuerst aus der Tabelle "zustellen" alles aus auszulesen mit der User ID z.b. 3 und danach sollte es noch prüfen ob es noch Themen gibt die der User 3 noch nicht aboniert hat.

Erläuterung: Es gibt z.b. 10 Themen die der User wählen kann, die stehen in "kategorie". Er entscheidet sich für 5 Themen, dies 5 Themen werden in die Tabelle "zustellen" geschriben(id_user & id_thema). Jetzt soll es mir die 5 Themen aus der Tabelle "kategorie" auslesen die der User NICHT gewählt hat also nur noch die 5 Themen die NICHT in der Tabelle "zustellen" mit der ID_thema vorhanden sind.

Hoffe es ist nun klarer.

Thx 4 Help
 
OK hab ein Bild meiner Tabellen gemacht.
1. Tabelle = thema
2. Tabelle = zustellen
3. Tabelle = user

Man sieht das User "3" + "4" Thema 2 + 3 boniert hat
User 2 + 1 haben KEIN Thema aboniert
User "5" hat Thema 3 aboniert

Ich brauche jetzt eine Abfrage die NUR die fehlenden Themen anzeigt.
Bei User "2"+"3" sollte also nichts kommen.
Bei User "1"+"2" sollte Thema "3" + "4" kommen.
Bei User "5" sollte Thema "4" kommen.

(im Beispiel sind es nur 3 Themen es gibt aber dann mehr)

MySQL und PHP dies muss doch zu schaffen sein. Hab so viele Varianten versucht :rolleyes:
 
HTML:
SELECT * FROM kategorie WHERE
verfuegbarkeit = 'waehlbar'
AND
id_thema NOT IN(SELECT id_thema FROM zustellen WHERE id_pseudonym = 2)

Wusste gar nicht das man 2 Select benützen kann mit IN... cool

Aber würde das noch einfacher gehen bzw. anders?

Mein problem wie ich erfahren habe von einem Arbeitskollegen war ein KARTESISCHES PRODUKT -> wikipedia

Danke für die Hilfe + bemühungen wer noch eine gescheitere Lösung hätte her damit:)
 
Zurück