2Danke
ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
255
255
EMPFEHLEN
-
Hallo erstmal,
ich bin ganz neu hier und hoffe ich finde hier Hilfe
Ich weiß nicht genau wie ich eine Abfrage erstellen soll, ich habe schon lange gegoogelt aber leider nichts richtiges gefunden und komme einfach nicht weiter.
Ich habe eine Tabelle:
Mitarbeiter
und eine TabellePHP-Code:userID | Name
------------
1 | Name1
2 | Name2
Tätigkeiten
Was ich nun möchte, ist per Abfrage alle Mitarbeiter rausbekommen, die Tätigkeit 4,6 und 7 ausführen, also alle die all diese ausführen und nicht nur eine davon.PHP-Code:userID | tätigkeitID
------------
1 | 4
1 | 6
1 | 7
2 | 4
2 | 5
Ich hoffe ich habe mich verständlich ausgedrückt und hoffe mir kann jemand auf die Sprünge helfen ?
...oder gibt es eine bessere Möglichkeit diese Daten zu speichern und abzufragen ?
-
Hi und willkommen
Ich gehe mal davon aus, dass du eine MySQL-Version nutzt, die Sub-Querys unterstützt.
Probier folgendes:
Code sql:1 2
SELECT * FROM Users WHERE userid IN (SELECT userid FROM Operations WHERE operationid IN(4,6,7))
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Hi,
danke für die Antwort, aber leider klappt das nicht, so zeigt er mir auch User 1 und 2 an, da bei beiden ja die 4 vorkommt
PS: Ich nutze mysql 5.0.45 hatte ich vergessen.
-
25.11.08 10:57 #4
ich glaube er möchte nur die User die alle 3 tätigkeiten ausführen!
Geändert von Johannes7146 (25.11.08 um 11:02 Uhr)
Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
-
Hi,
ganz genau, ob es nun 3 Tätigkeiten sind oder 5 etc.
...oder gibt es eine bessere Möglichkeit die Daten zu speichern und abzufragen ?
-
25.11.08 11:15 #6
ich bin leider kein Experte und wüsste nur einen umständlichen weg:
(liefer alle zurück die die Tätigkeit 4 ausführen!)Code :1
SELECT UserID FROM Tätigkeit WHERE TätigkeitID = 4
in diesem Ergebniss kannst du dann nach denen suchen die Tätigkeit 6 ausführen:
Code :1
SELECT USERID FROM Tätigkeit where userID IN (SELECT UserID FROM Tätigkeit WHERE TätigkeitID = 4 ) AND TätigkeitID = 6
und in diesem Ergebniss wiederum kannst du suchen wer zusätzlich noch die Tätigkeit 7 ausführt::
Code :1
SELECT USERID FROM Tätigkeit where userID IN (SELECT USERID FROM Tätigkeit where userID IN (SELECT UserID FROM Tätigkeit WHERE TätigkeitID = 4 ) AND TätigkeitID = 6)AND TätigkeitID = 7
und hast du alle UserID und kannst diese aus der Usertabelle raussuchen:
Code :1
SELECT * FROM User where UserID IN(SELECT USERID FROM Tätigkeit where userID IN (SELECT USERID FROM Tätigkeit where userID IN (SELECT UserID FROM Tätigkeit WHERE TätigkeitID = 4 ) AND TätigkeitID = 6)AND TätigkeitID = 7)
Ich gehe mal davona us das das Statement nicht funktioniert aufgrund von Tipp oder Rechtschreibfehlern, außerdem gibt es sicherlich eine schönere Möglichkeit das Problem zulösen aber ich denke so hast du zumindest schonmal einen Ansatz wie es funktionieren könnte.Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
-
Hi,
Danke, allerdings ist das glaube nicht so sauber, über etliche Abfragen an das Ergebnis zu kommen und Performance mäßig sicherlich auch nicht gut.
Wenn ich z.B. nun nach 10 Tätigkeiten suchen würde...
Ich denke es gibt da bestimmt eine saubere / kürzere Lösung, ich weiß allerdings auch nicht wonach ich genau googlen soll
Mir wurde gesagt, das es am besten ist die Daten in der Form abzuspeichern wie ich es im ersten Post geschrieben habe, allerdings ist hier die Abfrage mein Problem..
-
25.11.08 11:35 #8
Die Art wie du deine tabellen angelegt hast ist schon richtig so...
Würdest du eine Tabelle anlegen die eine user id hat und genauso viele zusaätzliche Spalten wie Tätigkeiten wäre die abfrage zwar recht simpel (select * from tabelle where user id = x and tätigkeit1 = true and tätigkeit2 = true..usw) allerdings müsstest du diese Tabelle dann jedesmal ändern, wenn es eine neue Tätigkeit gibt.
Also....das Datenbankmodell ist so schon richtig angelegt!
Wie gesagt, bin kein Experte..aber das es eine schönere Möglichkeit gibt...daran zweifel ich nicht! Nur leider kenn ich sie auch nicht :-/Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
-
Hi,
ja so hatte ich es auch erst überlegt, eine zweite Tabelle mit den Tätigkeiten und diese verknüpft über die userID und dann halt tätigkeit1 = 0 bzw.1 usw..
Dann wären die Ergebnisse mit einer Abfrage schnell und einfach zu bekommen.
Aber das soll ja nicht so schön / gut sein !?
Der Nachteil wie Du schon sagst, man müsste neue Felder anlegen wenn Tätigkeiten etc. dazu kommen.
Hmmm, hast Du vielleicht einen Tipp wonach ich googeln könnte um Antworten zu finden ?
Ich denke das ist ja eigentlich nichts unmögliches, gibt ja viele Seiten wie z.B. Flirtseiten oder so, da wird das doch wahrscheinlich auch so gemacht ?
-
25.11.08 11:59 #10
Mir fällt momentan auch kein passendes Suchwort ein, aber hier sind genügent Leute mit besserem Wissen als wir beide es Besitzen... warte einfach ein wenig.
Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
-
Hmm keiner eine Idee oder nen Tipp wonach ich googlen könnte ?
-
Moin warly,
vielleicht verstehe ich ja das Problem nicht richtig, aber....
Wenn Du eine Liste von Tätigkeiten hast, nämlich dieses "WHERE TätigkeitID IN ( 4, 5, 6)"
dann kannst Du einfach ein
Code :1 2 3 4
SELECT userID From Tätigkeiten WHERE TätigkeitID IN ( 4, 5, 6) GROUP by userID having Count (TätigkeitID) = 3;
Und wenn du meinetwegen noch die Usernamen aus einer Usertabelle dazuflanschen willst, dann:
Code :1 2 3 4 5 6
[SELECT u.userID, u.userName From Usertabelle u, (SELECT Userid From Tätigkeiten WHERE TätigkeitID IN ( 4, 5, 6) GROUP by userID having Count (TätigkeitID) = 3) t WHERE u.Userid = t.userID
Oder habe ich es nur falsch verstanden?
Grüße
Biber
-
Nein Super
Genau richtig verstanden !
Soweit war ich auch schon mal :
Mir fehlte das :PHP-Code:SELECT userID From Tätigkeiten
WHERE TätigkeitID IN ( 4, 5, 6)
GROUP by userID
...hätte ich auch drauf kommen können, mistPHP-Code:having Count (TätigkeitID) = 3;

Dein zweiter SQL Code ist also genau das was ich suche
Echt super vielen Dank !!
-
26.11.08 16:04 #14
Biber freut sich bestimmt über eine positive Bewertung und dann kannst du das Thema als "erledigt" markieren.
Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
Ähnliche Themen
-
Avr-Net-Io Pollin TCP/ip-Abfrage eigenes programm schreiben
Von finnex im Forum C/C++Antworten: 20Letzter Beitrag: 06.01.12, 12:21 -
SQL select abfrage - ergbis anzeigen bzw in Datei schreiben
Von Blame im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 25.11.07, 20:03 -
MySQL : Nicht funktionierende Abfrage, eventuell wegen MySQL-Version?
Von shredder01 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 17.11.07, 16:44 -
Db Abfrage in eine Excel Datei schreiben
Von medico im Forum PHPAntworten: 4Letzter Beitrag: 03.03.05, 11:47 -
Abfrage in tabelle schreiben
Von cct im Forum PHPAntworten: 2Letzter Beitrag: 27.09.04, 15:13





Zitieren

Login





