You are not logged in.

1

Saturday, July 28th 2012, 5:11pm

Ausgabe einer Liste im Template

Hallo zusammen,

ich bräuchte mal wieder kurze Unterstützung!

Ich habe mir selber etwas gebaut, es ist eine Art Job Liste! Dort kann der Admin Jobs mit einer kleinen Beschreibung eintragen. Unter anderem kann man da auch 3 Ansprechpartner eintragen. Jeder dieser Jobs ist ein Datensatz in einer SQL Tabelle die wie folgt aufgebaut ist:

wcf1_jobs
id
benennung
beschreibung
ansprechpartner_1
ansprechpartner_2
ansprechpartner_3
status

In der Spalte Ansprechpartner 1 bis 3 werden die User ID´s der Ansprechpartner gespeichert.

Ich habe eigentlich alles was ich will fertig nur die Finale Ausgabe der Jobliste nicht! Ich möchte einfach eine normale Ausgabe haben und möchte Anstatt der Id´s der Ansprechpartner den Usernamen aus der Tabelle wcf1_user anzeigen lassen. Ausgegeben werden sollen alle Datensätze mit dem Stauts 1 und die Ausgabe soll wie folgt aussehen:

Jobbenennung | Ansprechpatner 1 | Ansprechpatner 2 | Ansprechpatner 3 | Details

Ich probiere jetzt schon Stunden rum doch habe ich noch keine Lösung gefunden. Ich wollte es über JOIN in der Abfrage lösen. Nur zeigt der dann nur die exakten Ergebnisse an und nicht mehr alle die in Status 1 stehen.

Kann mir jemand helfen wie ich mein Problem lösen kann?
Grüße
Elite1981

Rebooto

Member

  • "Rebooto" is male

Posts: 147

Location: Dortmund

Occupation: Schüler

  • Send private message

2

Sunday, July 29th 2012, 1:05am

Also die einfachste Möglichkeit wäre wohl 3 weitere Spalten zu erstellen und die Namen gleich mit einzutragen :D

Aber so wie es jetzt ist würd ich es mal mit LEFT JOIN versuchen ;)

  • "frmwrk_123" is male

Posts: 1,119

Location: Hamburg

Occupation: Informatikstudent

  • Send private message

3

Sunday, July 29th 2012, 10:17am

Die drei Ansprechpartner sind also IDs von Usereinträgen? So zunächst einmal zu IDs in Tabellen. Die stehen immer am Anfang hinter der ID für den Eintrag selbst. Dann würde ich zwei Tabellen da draus machen.

wcf1_jobs
jobID
benennung
beschreibung
status

wcf1_user_to_jobs
userID
jobID

Jede jobID darf drei mal auftauchen für drei Ansprechpartner eben. Ein User kann aber auch Ansprechpartner für mehrere Jobs sein.

Damit ist auch die Abfrage einfacher.

Edit:

MySQL queries

1
2
3
4
5
6
7
SELECT jobs.jobID, jobs.bennenung, jobs.beschreibung, jobs.status, user.username
FROM    wcf1_jobs jobs
LEFT JOIN wcf1_user_to_jobs user_to_jobs 
ON (jobs.jobID = user_to_jobs.jobID)
LEFT JOIN wcf1_user user
ON (user_to_jobs.userID = user.userID)
WHERE jobs.status = 1;


Nach der Abfrage gehst du mit der while-Schleife durch das Ergebnis und kannst somit in ein Array das Ergebnis der Row schreiben.
Mit freundlichen Grüßen
frmwrk_123

Nützliche Plugins zum Selberbauen

This post has been edited 2 times, last edit by "frmwrk_123" (Jul 30th 2012, 9:55am)


4

Sunday, July 29th 2012, 4:12pm

Ich wollte es vermeiden aber ich habe noch mal alles ungeändert und eine Hilfstabelle wie von frmwrk beschrieben eingebaut!
Grüße
Elite1981

Netzwerg

Member

  • "Netzwerg" is male

Posts: 5,550

Location: Ruhrpott

Occupation: Student

  • Send private message

5

Sunday, July 29th 2012, 4:16pm

Nach der Abfrage gehst du mit der while-Schleife durch das Ergebnis und erzeugst für jede der userIDs ein User-Objekt und liest somit den Usernamen aus.

So würde ich das NICHT machen. So erzeugst du jede Menge Queries, was ziemlich inperformant ist. Queries in einer Schleife abzufeuern ist i.d.R. eine schlechte idee.

Ich würde an der Stelle einfach auch noch die User-Tabelle mit LEFT JOIN dranholen und dann direkt aus der Abfrage User-Objekte erzeugen, was die Anzahl der benötigten Queries auf 1 reduziert.
Best regards,
Sebastian Teumert

6

Sunday, July 29th 2012, 4:48pm

Ich würde an der Stelle einfach auch noch die User-Tabelle mit LEFT JOIN dranholen und dann direkt aus der Abfrage User-Objekte erzeugen, was die Anzahl der benötigten Queries auf 1 reduziert.

Userobjektive sind vermutlich überhaupt nicht nötig, wenn nur der username benötigt wird.
Und der sollte dann im Stile des wbbs eh direkt in einer Tabelle (neben wcf1_user) gespeichert werden, da sonst nichts angezeigt werden kann, wenn der user gelöscht wird.

lg

Edit: Sry Netzwerk, Zitat korrigiert! :(

This post has been edited 1 times, last edit by "Fr33chen" (Jul 30th 2012, 11:48am)


Netzwerg

Member

  • "Netzwerg" is male

Posts: 5,550

Location: Ruhrpott

Occupation: Student

  • Send private message

7

Sunday, July 29th 2012, 7:01pm

Userobjektive sind vermutlich überhaupt nicht nötig, wenn nur der username benötigt wird.
Und der sollte dann im Stile des wbbs eh direkt in einer Tabelle (neben wcf1_user) gespeichert werden, da sonst nichts angezeigt werden kann, wenn der user gelöscht wird.

lg

Das geht natürlich auch, auf jeden Fall sollten Queries in einer Schleife vermieden werden. das kommt eben auch ein bisschen drauf an, was man später damit noch machen will, ob man die Userdaten im späteren Verlauf der Bearbeitung noch braucht, oder ob der Name ausreicht.


PS: Das Zitat ist leider falsch ;) ich bin nicht frḿwrk_123
Best regards,
Sebastian Teumert

  • "frmwrk_123" is male

Posts: 1,119

Location: Hamburg

Occupation: Informatikstudent

  • Send private message

8

Monday, July 30th 2012, 9:57am

Ich würde an der Stelle einfach auch noch die User-Tabelle mit LEFT JOIN dranholen und dann direkt aus der Abfrage User-Objekte erzeugen, was die Anzahl der benötigten Queries auf 1 reduziert.

Achso, indem man gleich dem Konstruktor die fertige Row übergibt. Jedenfalls habe ich die Query jetzt abgeändert, sodass der Username ausgelesen wird.
Mit freundlichen Grüßen
frmwrk_123

Nützliche Plugins zum Selberbauen

Netzwerg

Member

  • "Netzwerg" is male

Posts: 5,550

Location: Ruhrpott

Occupation: Student

  • Send private message

9

Monday, July 30th 2012, 2:33pm

Achso, indem man gleich dem Konstruktor die fertige Row übergibt.

Jap ;)

Du kannst im übrigen aus einer Abfrage auch zwei Objekte erzeugen. Hast du eine Tabelle wcf1_some_thing und ein SomeThingDBO, so kannst du beide Tabellen joinen und in der Schleife ein SomeThingDBO und ein User-Objekt erstellen. Das jedes der Objekte nen paar mehr Daten hat stört da nicht wirklich (nur zur Vollständigkeit erwähnt).
Best regards,
Sebastian Teumert