SQL Query Help

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/sql_query_help_167320/page_1 - zur Vollversion wechseln!


ica schrieb am 17.08.2006 um 11:02

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 schrieb am 17.08.2006 um 11:15

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 schrieb am 17.08.2006 um 16:06

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 schrieb am 17.08.2006 um 16:56

IN ist eine oder verknüpfung, also leider nicht das was ich will :(


that schrieb am 17.08.2006 um 21:04

"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 schrieb am 18.08.2006 um 01:13

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 schrieb am 18.08.2006 um 11:03

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 schrieb am 18.08.2006 um 11:12

thx that funktioniert


fresserettich schrieb am 18.08.2006 um 15:30

wäre auch in die richtig und that gegangen und in einer where-bedingung mit subquerys zu arbeiten




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025