 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
03.01.2006, 17:26
|
#1
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
Abfrage für Darstellung in Template System
Hi!
ich habe vier Datenbanken: - "gruppe" mit den feldern "id_gruppe" und "gruppenname"
- "user" mit den wichtigen feldern "id_user" und "username"
- "us_gr" mit "id_user_ug" und "id_gruppe_ug"
- "verantwortung" mit "id_user_v" und "id_gruppe_v"
us_gr zeigt an, welcher user in welche Gruppe gehört
verantwortung zeigt an, welcher user für welche gruppe verantwortlich ist
Ich benutze das Templatesystem TBS ( http://www.tinybutstrong.com)
Jetzt möchte ich eine einzige Abfrage erstellen, damit ich die "Auswertung" möglichst einfach weitergeben kann.
Es soll nach Gruppen sortiert angezeigt werden, erst die User die Verantwortung haben und dann die User die in der Gruppe sind.
muss ich der Datenbank noch felder hinzufügen das das möglich ist? irgentwie fehlt mir ein feld wo ich bestimmen lassen kann, ob der user in der GRuppe ist oder verantwortung hat.
Am ende soll ungefähr folgendes bei der Abfrage rauskommen:
gruppe | user | verantwortung
gruppe | user | mitglied
gruppe | user | mitglied
Das könnte man dann als subblock verwenden.
Hier mal eine Abfrage:
SELECT gruppenname, username
FROM user, gruppe, verantwortung, us_gr
WHERE id_user = id_user_v
OR id_user = id_user_ug
ORDER BY gruppenname
Ich kann aber so leider nicht unterscheiden...
Für Hilfe bin ich furchtbar dankbar!
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
03.01.2006, 18:54
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Du musst Die Tabellen (keine Datenbanken  ) auch entsprechend joinen,
sonst hast Du einen Klumpen unverwertbarer Daten.
Du machst einen Full Join, solltest aber mehrere Inner Joins machen mit den entsprechenden Verknüpfungen.
|
|
|
03.01.2006, 23:09
|
#3
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
ah ok, für sowas braucht man einen join...
davor habe ich mich bis jetzt immer gedrückt, wie mache ich das???
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
03.01.2006, 23:28
|
#4
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Am besten erstmal darüber lesen und das Prinzip verstehen.
z.B. hier: http://www.little-idiot.de/mysql/mysql-118.html
Wenn Du Access hast, dann kannst Du Dir das ja mal nachbilden und im Abfrageeditor grafisch die Bezüge herstellen (Felder verknüpfen). Ich fand das immer einzigartig und eine feine Sache - wer kann das schon aus dem Ärmel schütteln, wenn viele Tabellen verknüpft sind ...
|
|
|
04.01.2006, 16:28
|
#5
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
Jetzt hab ich es etwas anders gemacht, ich hab für verantwortlicher der gruppe und gruppenmitglied nur noch eine tabelle (us_gr) und da gibts eine FLAG Supervisor.
Ok, jetzt hab ich folgende Abfrage zusammmengestellt:
SELECT gruppenname, username, supervisor
FROM gruppe, user, us_gr
WHERE id_user_v = id_user
AND id_gruppe_v = id_gruppe
ORDER BY gruppenname, supervisor
Wie sage ich jetzt, dass er auf jeden fall alle gruppen anzeigen soll, selbst wenn kein eintrag in der Verknüpfungstabelle ist. Ist das Right, left oder inner, outer....
danke!
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
04.01.2006, 17:24
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Lieber Tobias, Du hast Dir meinen Link nicht richtig angeschaut, dort sind doch genug Praxisbeispiele, u.a. auch folgendes:
Zitat:
|
Bei einem OUTER JOIN gibt es immer eine Tabelle, die als erhaltene Tabelle bezeichnet wird; alle ihre Zeilen bleiben erhalten
|
|
|
|
04.01.2006, 20:10
|
#7
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
leider bin ich halt nach dem unfall net mehr so fit, sorry - muss erst wieder reinkommen
nach längerem probieren hab ich das geschafft
SELECT gruppenname, supervisor, username
FROM gruppe
LEFT OUTER JOIN user ON id_user_v = id_user
AND id_gruppe_v = id_gruppe, us_gr
ORDER BY gruppenname, supervisor
aber jetzt zeigt er mir alle möglichkeiten an und wo es nichts gibt NULL.
ich will aber wenndann nur was angezeigt haben, wenn gar keine verknüfung da ist und wenn dann nur einmal
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
04.01.2006, 20:19
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Dann schliess die NULL doch aus (Where feld != NULL)
Wenn die Sachen nur einmal kommen sollen, erreichst Du das mit DISTINCT.
Das Problem ist, das ich die Daten nicht kenne und nicht weiss, welche Ausgabe Du genau haben willst, daher kann ich immer nur mutmassen 
|
|
|
06.01.2006, 11:02
|
#9
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
du hast genau das richtige vermutet
Jetzt hab ich aber noch ein letztes Problem: Null wird immer am Anfang angezeigt, außer wenn ich DESC eintrage.
mit welchem Befehl kann ich erreichen, dass Null immer zuletzt angezeigt wird?
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
06.01.2006, 11:16
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Moin Tobias,
Normal geht das nicht ausser mit DESC.
Du könntest dem Feld einen anderen Wert zuweisen, z.B.
... if(feld=NULL;'zzz';feld) as feldanzeig, ...
|
|
|
08.01.2006, 09:20
|
#11
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
Schlussendlich möchte ich User anzeigen, die in noch keiner Gruppe sind.
Das hab ich jetzt mal in einer Extra abfrage gemacht:
Zitat:
SELECT username, firstname, lastname, email, phone
FROM '.db_prefix.'user, '.db_prefix.'us_gr
WHERE id_user_v != id_user
|
Das Problem ist aber, er verknüpft ja alle Gruppen mit allen User und zeigt mir auch user an, die schon in einer Gruppe sind, weil er ja auch Datensätze anzeigt, die gerade in der entsprechenen Verknüpfung nicht vorkommen.
Ich möchte mir aber nur jene user anzeigen lassen, die gar nicth in der us_gr gruppe vorkommen.
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
08.01.2006, 11:13
|
#12
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Aus obigen Anweisungen hast Du doch gesehen, das Du wieder joinen musst.
Ausserdem ist genau das in dem Link oben erklärt, schau Dir mal relativ weit unten die Beispiele an 
|
|
|
08.01.2006, 12:12
|
#13
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
Jo, natürlich hab ich da zuerst geschaut und rausgefunden, dass der LEFT JOIN der richtige ist. Aber ich lasse mir quasi nur ausgeben, was ausschließlich NICHT in der rechten Tabelle steht. Weils aber nicht geklappt hat, hab ich net gewusst ob der wirklich der richtige ist
Nur bei der Umsetzung hackts wieder:
Code:
SELECT id_user, username, firstname, lastname, email, phone
FROM '.db_prefix.'user LEFT JOIN '.db_prefix.'us_gr ON id_user_v != id_user
ORDER BY lastname
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
08.01.2006, 12:20
|
#14
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
bei der ON-Anweisung solltest Du noch die Tabellen angeben, ausserdem probier mal mit = Anweisung und dahinter WHERE tabelle.id_user_v IS NULL
|
|
|
08.01.2006, 12:33
|
#15
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
so zeigt er mir jetzt leider gar keine user an:
Code:
SELECT id_user, username, firstname, lastname, email, phone
FROM '.db_prefix.'user LEFT JOIN '.db_prefix.'us_gr ON id_user_v IS NULL
WHERE id_user_v = id_user ORDER BY lastname
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:04 Uhr.
|
 |