"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

SQL Query Help

iCA- 17.08.2006 - 11:02 1134 8
Posts

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
unter mysql 5.0 hab ich folgendes problem:

hab ein query was einfach 2 tables joint - so weit so gut, das result davon sieht mehr oder weniger so aus:

Code:
user_id | user_class_id
-----------------------
   39   |       1
   39   |       7
   39   |       8
   54   |       1

jetzt will ich alle user (im obigen beispiel nur einer mit der id 39) die sowohl die user_class_id 1 UND 7 haben.

die einzige methode mit der ichs bisher geschafft hab war folgende:
SELECT ... INNER JOIN ... WHERE ... GROUP BY user_id HAVING COUNT(*) >=2

da das query haber später noch weitaus komplexer wird ist das auch net wirklich eine lösung. außerdem wird das query dynamisch aufgebaut und muss für alle möglichen kombinationen funktionieren...

any ideas?

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
vielleicht mit einem geschachtelten SELECT ?
so in etwa:
Code:
SELECT user_id
FROM ...
WHERE user_class_id = '7' AND user_id IN (SELECT user_id
                                          FROM ...
                                          WHERE user_class_id = '1');

leider sind meine SQL-kenntnisse auch nicht mehr die besten, und ich habe keine DB installiert um das jetzt gschwind zu testen.

Triple-X

Addicted
Avatar
Registered: Feb 2001
Location: Pregarten (OÖ)
Posts: 485
Habe jetzt nicht zum ausprobieren zur Hand, müsste aber so funktionieren, wenn ich die Anforderungen richtig verstanden habe

Code:
SELECT * 
FROM [USER]
INNER JOIN [USER_USER_CLASS] ON [USER].User_ID=[USER_USER_CLASS].User_ID
WHERE [USER_USER_CLASS].User_Class_ID IN (1,7)

wobei die Tabelle [USER_USER_CLASS] die Beziehungstabelle zwischen User und User_class ist.

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
IN ist eine oder verknüpfung, also leider nicht das was ich will :(

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
"straight forward" würde ich sowas probieren (MySQL 5 kann ja AFAIK endlich Subqueries):

select user_id from user u
where exists(select user_class_id from user_class c where c.user_id = u.user_id and c.class_id = 1)
and exists(select user_class_id from user_class c where c.user_id = u.user_id and c.class_id = 7)

Ich hab kein MySQL 5 da und kanns daher nicht probieren, vielleicht ist das auch völliger Quatsch ... aber vielleicht gehts ja. ;)

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5374
könntest eventuell posten was die end-query können soll weil irgendwie was dynamisch machen etc. hilft mir nicht recht weiter ich kann ja nicht raten in welche richtung es gehen soll

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
Zitat von fresserettich
könntest eventuell posten was die end-query können soll weil irgendwie was dynamisch machen etc. hilft mir nicht recht weiter ich kann ja nicht raten in welche richtung es gehen soll

das end query kann ganz unterschiedlich aussehen. es geht darum, dass user beliebige suchfilter definieren und diese auch speichern können. daher sieht das query jedesmal anders aus - je nachdem was sich der user zusammenstellt.

aber das tut hier nichts zur sache, wenn das query vom startpost funktioniert geht auch der rest...sind einfach nur mehrere joins/subquerys.

@that: thx, werd ich mal probieren

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
thx that funktioniert

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5374
wäre auch in die richtig und that gegangen und in einer where-bedingung mit subquerys zu arbeiten
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz