1Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
263
263
EMPFEHLEN
-
Hallo zusammen,
ich habe folgende MySQL-Tabelle:
Code :1 2 3 4 5 6 7 8 9 10 11 12
| userId | categoryId | | 1 | 1 | | 1 | 2 | | 1 | 3 | | 1 | 4 | | 2 | 2 | | 2 | 3 | | 3 | 1 | | 3 | 3 | | 4 | 2 | | 4 | 3 | | 4 | 4 |
Von dieser Tabelle möchte ich nun sämtliche userId´s auswählen, welche nicht die categoryId 1 und 3 besitzen. Sprich, als Ausgabe sollte in diesem Fall nur die userId 2 und 4 ausgegeben werden.
Meine bisherigen Versuche die Anzahl der Datensätze mit und ohne der categoryId 1 und 3 zu vergleichen, waren bisher leider erfolglos. Gibt es keine Möglichkeit die Datensätze zu kombinieren und dann über die WHERE-Bedingung die ungewünschten Kategorien auszublenden?
In etwa wie in diesem Beispiel:
Code sql:1
SELECT userId FROM test WHERE categoryId NOT IN(1,3) GROUP BY userId
Ich bin für jeden Tipp dankbar. Falls ihr selbst etwas herumprobieren wollt, hier ist meine Test-Tabelle:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
CREATE TABLE IF NOT EXISTS `test` ( `userId` INT(11) NOT NULL, `categoryId` INT(11) NOT NULL, KEY `userId` (`userId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin; INSERT INTO `test` (`userId`, `categoryId`) VALUES (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (3, 1), (3, 3), (4, 2), (4, 3), (4, 4);
Geändert von Nanaki (15.08.10 um 17:24 Uhr)
-
Ich verstehe die Frage hier ehrlich gesagt nicht ganz:
Du hast dir doch schon eine Lösung mit
Code :1
SELECT userId FROM test WHERE categoryId NOT IN(1,3) GROUP BY userId
überlegt, die doch einwandfrei funktioniert.

Mfg, Alex
“The function of good software is to make the complex appear to be simple.” (Grady Booch)
“First, solve the problem. Then, write the code.” (John Johnson)
-
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
..., weil es da ja eine Zeile gibt, in der die categoryId 1 ist und das soll nicht seinUnd wieso die userId 3 nicht?
Mfg, Alex
“The function of good software is to make the complex appear to be simple.” (Grady Booch)
“First, solve the problem. Then, write the code.” (John Johnson)
-
Nach der Logik dürften aber 2 und 4 auch nicht im Ergebnis auftauchen, da es für beide eine Zeile mit categoryId 3 gibt. Ich denke Nanaki will all die userIds ausschließen, für die es sowohl eine Zeile mit categoryId 1 als auch eine Zeile mit categoryId 3 gibt. Mir ist auch gerade aufgefallen, dass die Zeile 3 | 4 wohl lediglich einen Tippfehler enthält. Sie taucht weiter unten im Insert-Statement nicht auf, an deren Stelle tritt stattdessen 3 | 3. So ergibt das ganze auch wieder einen Sinn.
In dem Fall könnte Folgendes klappen (ungetestet):
Funktioniert aber nur unter der Voraussetzung, dass es in der Tabelle keine Zeile doppelt gibt (was man ggf. durch ein entsprechendes Constraint garantieren kann).Code sql:1 2 3 4
SELECT userId FROM test GROUP BY userId HAVING SUM(categoryId IN (1, 3)) < 2
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Damit werden userId 1-4 ausgegeben, weil jede userId mehrere Datensätze besitzt. Somit ist die Bedingung, dass categoryId 1 und 3 ignoriert werden sollen, hinfällig.
Zwar werden mit der Abfrage die Datensätze ignoriert, welche die categoryId 1 und 3 besitzen, aber nicht in Bezug auf die userId. Ich möchte, dass die userId gebündelt betrachtet wird. Sobald eine userId die categoryId 1 und 3 besitzt, soll die userId nicht angezeigt werden.
Schonmal danke für eure Mühe
/edit
@ Matthias Reitinger
Danke für den Hinweis des Tippfehlers. Das sollte natürlich die categoryId 3 sein.
Sorry
/edit2
Vielen Dank für die Lösung, das Ganze funktioniert einwandfrei
Geändert von Nanaki (15.08.10 um 17:38 Uhr)
Ähnliche Themen
-
XSLT - Datensätze kombinieren
Von mtk-flo im Forum XML TechnologienAntworten: 2Letzter Beitrag: 10.06.07, 12:23 -
Mysql Count und Update kombinieren
Von Hannibal im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 08.06.07, 18:04 -
PHP Mysql Datensätze aus db holen...
Von CyberMax im Forum PHPAntworten: 4Letzter Beitrag: 19.04.04, 14:17 -
MySQL mit Standalone Applikation kombinieren
Von crimbler im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 26.06.03, 14:58 -
MySQL: maximale Datensätze
Von deepgreen im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 09.01.03, 20:05





Zitieren


Login




