Hi Leute,
ich arbeite nun schon länger mit mysql. Heute steh ich nun das erste mal aufn schlauch und komme echt nicht mehr weiter.
Ich habe folgendes Problem.
Vorher die Tabelle mit ein paar beispiel Datensätzen:
Ich habe eine Tabelle, in dieser gibt es 3 Spalten(id, kunden_id, verteiler_id)
Die id ist der primary key, kunden_id = fremdschlüssel von der Kundentabelle und Verteiler_id = Fremdschlüssel von der Verteilertabelle.
Ein Kunde kann mehrere Verteiler haben.
So hat hier der Kunde mit der id 1 insgesamt 3 Verteiler...2,6 und 9.
Und Kunde mit der id 2 hat 2 Verteiler...2 und 6
Nun möchte ich mit hilfe der SQL Abfrage auslesen welche Kunden alle Verteiler 2 UND 6 UND 9 haben. Sprich in diesem Beispiel darf Kunde 2 nicht mit angezeigt werden.
Mein erster lösungsansatz war dieser
bis mir einfiel, das es so gar nicht geht, da er jetzt in verteiler_id 2,6 und 9 in einer Spalte erwartet. Diese aber natürlich auf mehrere Datensätze aufgeteilt sind.
Mein Zweiter Lösungsansatz war dann dieser
Das sieht schon besser aus, jedoch kommt bei dieser Abfrage auch die Kundennummer 2 mit. Obwohl der gar nicht verteiler_id 9 hat.
Habe dann die Zweite SQL Abfrage noch etwas modifiziert
aber mit dem selben ergebnis, das beide Kunden angezeigt werden.
Funktioniert alles aber nicht. Entweder er zeigt alle Datensätze an, oder gar nichts.
Ich hoffe ihr könnt mir helfen.
Ziel soll später sein, das man mehrere Verteiler auswählen kann, und nur Kunden die in verteiler 1 UND 2 UND 3 etc.. stehen werden angeschrieben o.ä.
ich arbeite nun schon länger mit mysql. Heute steh ich nun das erste mal aufn schlauch und komme echt nicht mehr weiter.
Ich habe folgendes Problem.
Vorher die Tabelle mit ein paar beispiel Datensätzen:
Code:
CREATE TABLE IF NOT EXISTS `kunden` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; CREATE TABLE IF NOT EXISTS `kunden_verteiler` ( `id` int(11) NOT NULL AUTO_INCREMENT, `kunden_id` int(11) NOT NULL, `verteiler_id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6; INSERT INTO `kunden` (`id`, `name`) VALUES (1, 'Test'), (2, 'Test2'); INSERT INTO `kunden_verteiler` (`id`, `kunden_id`, `verteiler_id`) VALUES (1, 1, 2), (2, 1, 6), (3, 1, 9), (4, 2, 2), (5, 2, 6);
Die id ist der primary key, kunden_id = fremdschlüssel von der Kundentabelle und Verteiler_id = Fremdschlüssel von der Verteilertabelle.
Ein Kunde kann mehrere Verteiler haben.
So hat hier der Kunde mit der id 1 insgesamt 3 Verteiler...2,6 und 9.
Und Kunde mit der id 2 hat 2 Verteiler...2 und 6
Nun möchte ich mit hilfe der SQL Abfrage auslesen welche Kunden alle Verteiler 2 UND 6 UND 9 haben. Sprich in diesem Beispiel darf Kunde 2 nicht mit angezeigt werden.
Mein erster lösungsansatz war dieser
Code:
SELECT * FROM kunden LEFT JOIN kunden_verteiler ON kunden_verteiler.kunden_id = kunden.id WHERE verteiler_id = 2 AND verteiler_id = 6 AND kunden_verteiler.verteiler_id = 9
Mein Zweiter Lösungsansatz war dann dieser
Code:
SELECT * FROM kunden LEFT JOIN kunden_verteiler ON kunden_id = kunden.id WHERE verteiler_id = 2 AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 6) AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 9)
Habe dann die Zweite SQL Abfrage noch etwas modifiziert
Code:
SELECT * FROM kunden LEFT JOIN kunden_verteiler ON kunden_id = kunden.id WHERE (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 2) AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 6) AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 9)
Code:
SELECT * FROM kunden LEFT JOIN kunden_verteiler ON kunden_id = kunden.id WHERE verteiler_id = 2 AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 6 AND (SELECT count(id) as co_tmp FROM kunden_verteiler WHERE verteiler_id = 9))
Funktioniert alles aber nicht. Entweder er zeigt alle Datensätze an, oder gar nichts.
Ich hoffe ihr könnt mir helfen.
Ziel soll später sein, das man mehrere Verteiler auswählen kann, und nur Kunden die in verteiler 1 UND 2 UND 3 etc.. stehen werden angeschrieben o.ä.
Comment