Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Frage zu Sql-Abfrage

Diskussion: Frage zu Sql-Abfrage im Forum Code Kitchen, in der Kategorie Software Home; Anzeige So, nachdem ich zu meiner letzten Frage mit Java und MySQL ja schnell gute Antworten hatte, probiere ich das ...

Like Tree2Likes
  • 1 Post By GrafZahl
  • 1 Post By GrafZahl

Antwort
Alt 18.08.11, 13:52   #1 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
erledigt Frage zu Sql-Abfrage

Anzeige

So,

nachdem ich zu meiner letzten Frage mit Java und MySQL ja schnell gute Antworten hatte, probiere ich das gleich nochmal.

Eckdaten sind die gerade genannten: Java und MySQL

Die Tabellen halte ich jetzt mal etwas abstrakt und auf das für die Frage nötigste beschränkt.

Es geht hier um 3 Tabellen:

Code:
Tabelle Objekte
|------|-----------------|
|  oID  |    Objekt        |
--------------------------
|  1     |    obj1              |
|  2     |    obj2              |
|  3     |    obj3              |


Tabelle Rechte
|------|-----------------|
|  pID  |    Permission       |
--------------------------
|  1     |    per1              |
|  2     |    per2              |


Tabelle Objekte_Rechte
|------|---------|
|  oID  |    pID    |
------------------
|  1     |    1       |
|  1     |    2       |
|  2     |    1       |
Was ich bereits habe, da es ja sehr simpel ist, ist eine Abfrage, mit der ich alle aktuell eingetragenen "Objekte" ausgeben lasse, also im Prinzip
Select Object From Objekte;

Interessant wäre für mich jetzt aber die Zusatzinformation, wieviele Rechte jedem einzelnen Objekt zugeordnet sind (welche ist irrelevant, nur die Anzahl).

Klar, ich könnte jetzt für jedes einzelne Objekt nochmal eine Abfrage mit Count machen, wieviele Rechte dieses Objekt in der Tabelle Objekte_Rechte hat, aber dieser Weg gefällt mir nicht und ich hoffe eigentlich auf einen Tip, wie ich das in einer einzigen Abfrage unterbringen kann und als Ausgabe etwa sowas bekomme:

Code:
|--------|---------|
| Object  |   Count |
------------------
|  obj1    |    2       |
|  obj2    |    1       |
|  obj3    |    0       |
lightsaver ist offline   Mit Zitat antworten
Alt 18.08.11, 14:08   #2 (permalink)
 
Registriert seit: 03.04.11
Tsjuder Leistung: 8086
Likes: 10
Standard

Musst doch eigentlich nur nach oID gruppieren und die pID zählen. Wenn du alle Objekte ausgegeben haben willst am besten noch einen äußeren Verbund sprich ungefähr so:
Code:
SELECT oID,COUNT DISTINCT(pID)
FROM Objekte_Rechte
GROUP BY oID
dann hast du alle Rechte pro oID gezählt um die Ausgabe zu kriegen wie du sie angegeben hast müsste es dann insgesamt ungefähr so machen:
Code:
SELECT Objekte.Objekt,temp.Zahl
FROM Objekte LEFT OUTER JOIN
	(SELECT oID,COUNT DISTINCT(pID) AS Zahl
	FROM Objekte_Rechte
	GROUP BY oID) AS temp ON Objekte.oID = temp.oID
Wobei pID wahrscheinlich sowieso nicht für eine oID zweimal vorkommt, also kann man das DISTINCT auch weglassen.
Und man muss jetzt noch beachten, dass für ein Objekt, dass keine Rechte hat nicht die 0 sondern die Nullmarke herauskommen wird.

Geändert von Tsjuder (18.08.11 um 14:12 Uhr)
Tsjuder ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.08.11, 14:09   #3 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

also den java bezug sehe ich nicht, aber was du suchst klingt nach join + aggregation

Code:
SELECT Objekt, Count(pID) 
FROM Objekte AS t1
LEFT JOIN Objekte_Rechte AS t2 ON t1.oID=t2.oID
GROUP BY Objekt

//
da war doch jemand schneller ...
lightsaver likes this.
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 18.08.11, 14:18   #4 (permalink)
 
Registriert seit: 03.04.11
Tsjuder Leistung: 8086
Likes: 10
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
//
da war doch jemand schneller ...
Sieht dann aber irgendwie doch bei dir eleganter aus...naja kompliziert denken ist einer meiner Stärken
Tsjuder ist offline   Mit Zitat antworten
Alt 18.08.11, 15:20   #5 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
also den java bezug sehe ich nicht, aber was du suchst klingt nach join + aggregation

Code:
SELECT Objekt, Count(pID) 
FROM Objekte AS t1
LEFT JOIN Objekte_Rechte AS t2 ON t1.oID=t2.oID
GROUP BY Objekt

//
da war doch jemand schneller ...
Super, so ungefähr habe ich mir das vorgestellt, teste das heute Abend gleich mal. Meine Lösung hätte dann vermutlich eher wie die von Tsjuder oder noch umständlicher ausgesehen

Der Bezug auf Java war auch eigentlich nur deshalb dabei, falls es mit dem JDBC Einschränkungen irgendeiner Art geben sollte, die mir nicht bekannt wären Da gebe ich dann doch lieber zu viele Infos als zu wenige
lightsaver ist offline   Mit Zitat antworten
Alt 18.08.11, 21:45   #6 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

So, kurze Rückmeldung, hat genau so funktioniert, wie ich mir das erhofft habe , Danke
lightsaver ist offline   Mit Zitat antworten
Alt 18.08.11, 22:16   #7 (permalink)
 
Registriert seit: 03.04.11
Tsjuder Leistung: 8086
Likes: 10
Standard

Ich musste gerade aufeinmal lachen: GrafZahl benutzt die Aggregatfunktion Count...welche auch sonst
Tsjuder ist offline   Mit Zitat antworten
Alt 19.08.11, 04:51   #8 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard



http://www.youtube.com/watch?v=hNatvLe18ro
Chakky likes this.
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Frage zu Sql-Abfrage
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61