Select und Funktion - Frage

Hallo Leute,

habe gerade ein Problem mit einem SQL Statement wo ich leider
trotz Doku nicht wirklich zu einer Lösung komme :(

Um folgendes Statement geht es
SELECT id, title, project, priority, deadline, status FROM ticket
WHERE id IN
(SELECT ticket_id FROM user_ticket WHERE user_id = '".$userID."' AND intern = '".$intern."');

Erklärung
In der Tabelle "ticket" sind Support-Tickets gespeichert
In der Tabelle user_ticket wird ein Ticket mit dem Ersteller referenziert.

Ich lese anhand der User_ID alle Tickets aus die der Benutzer erstellt hat.
Dies klappt alles soweit.

Nun ist es aber so das das Feld "status", "priority" und "project" nur eine
ID des jeweiligen Status, Prio oder Projects zurück liefert.

Ich würde nun gerne im selben Select Statement bereits die konkreten Status, Prio -> Namen auslesen die in den Tabellen "status" und "priority" stehen.

z.B: bekomme ich priority = 1 zurück ich würde aber gerne "wichtig" zurück bekommen.

In der Tabelle priority ist 1 = wichtig.
Leider hakt es bei mir gerade wie man so etwas löst.


Bei Project wird das ganze noch ein bischen komplizierter den projects ist notgedrungen auf einer anderen Datenbank (selber Server) gespeichert.
Ich gehe davon aus dies kann ich nicht innerhalb 1 SQL Statements lösen?
(Benutzer hat Rechte auf beide Datenbanken)

Zur guter letzt würde ich gerne das Feld "deadline" von SQL formatiert zurück bekommen, es liefert nämlich einen Timestamp. Bis lang habe ich keine SQL-Funktion gefunden die es mir ermöglicht das es mir ein Datum nach Schema ("d.m.y") zurück gibt.


Danke schon mal für jegliche Hilfe :)
 
Hallo,

Nun ist es aber so das das Feld "status", "priority" und "project" nur eine
ID des jeweiligen Status, Prio oder Projects zurück liefert.

Ich würde nun gerne im selben Select Statement bereits die konkreten Status, Prio -> Namen auslesen die in den Tabellen "status" und "priority" stehen.

z.B: bekomme ich priority = 1 zurück ich würde aber gerne "wichtig" zurück bekommen.

In der Tabelle priority ist 1 = wichtig.
Leider hakt es bei mir gerade wie man so etwas löst.
Dafür kann man in relationalen Datenbanken Tabellen über ein JOIN verbinden:
Code:
SELECT t.id, t.title, t.project, p.prio_name, t.deadline, s.status_name
FROM ticket t, prio p, status s
WHERE t.priority = p.prio_id
AND t.status = s.status_id
AND t.id IN
(SELECT ticket_id FROM user_ticket WHERE user_id = '".$userID."' AND intern = '".$intern."');
Du führst also ein Select über mehrere Tabellen aus, wobei du den Namen der Priorität aus der Tabelle "prio" und den Namen des Status aus der Tabelle "status" und den Rest aus der Tabelle "ticket" ausliest, unter der Nebenbedingung, dass die Prio-ID im Ticket-Datensatz und Prio-Datensatz übereinsteimmen (bei Status ebenso).
Wenn du mehr wissen willst, lies dir in der MySQL-Doku mal was zu "JOIN" durch, das ist nämlich genau das was du suchst.

Bei Project wird das ganze noch ein bischen komplizierter den projects ist notgedrungen auf einer anderen Datenbank (selber Server) gespeichert.
Ich gehe davon aus dies kann ich nicht innerhalb 1 SQL Statements lösen?
(Benutzer hat Rechte auf beide Datenbanken)
Das geht genauso, nur dass du die Tabelle, die in einer anderen Datenbank mit voll qualifiziertem Namen ansprechen musst, z.B.
Code:
select a.*, b.* from Tabelle1 a, Anderedatenbank.Tabelle2 b WHERE ...
Zur guter letzt würde ich gerne das Feld "deadline" von SQL formatiert zurück bekommen, es liefert nämlich einen Timestamp. Bis lang habe ich keine SQL-Funktion gefunden die es mir ermöglicht das es mir ein Datum nach Schema ("d.m.y") zurück gibt.
Dafür gibt es die MySQL-Funktion FROM_UNIXTIME (http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html):
Code:
SELECT FROM_UNIXTIME(datum, '%d.%m.%Y') from tabelle ...

mfg, metax.
 
Hey,

vielen Dank für deine Ausführliche Antwort.
Da muss ich mich nun erstmal rein denken in das, für mich, sehr komplexe Select Statement ;)

Danke :)
 
Original von metax.
...
Code:
SELECT t.id, t.title, t.project, p.prio_name, t.deadline, s.status_name
FROM ticket t, prio p, status s
WHERE t.priority = p.prio_id
AND t.status = s.status_id
AND t.id IN
(SELECT ticket_id FROM user_ticket WHERE user_id = '".$userID."' AND intern = '".$intern."');
...

Ich finde solch eine Schreibweise immer grauenhaft, lieber etwas aufgeräumter :

Code:
sprintf('SELECT t.id, t.title, t.project, p.prio_name, t.deadline, s.status_name
FROM ticket AS t
JOIN prio AS p
ON t.priority = p.prio_id
JOIN status AS s
ON t.status = s.status_id
WHERE t.id IN
(SELECT ticket_id FROM user_ticket WHERE user_id = %d AND intern = %d);', $userID, $intern);
 
Guten Morgen,

habt tausend Dank Ihr beiden :)
Nun klappt alles hervorragend und ich hab wieder einiges gelernt.

=)

?dit:
-------------
Mh nun hab ich schon wieder ein Problem und kann es nicht lösen :(
Die Join Beispiele aus dem Internet helfen mir hier leider nicht weiter.

Folgendes Statement:
Code:
SELECT t.id, t.title, FROM_UNIXTIME(t.create_date, '%d.%m.%Y') as create_date, t.description, t.media, FROM_UNIXTIME(t.deadline, '%d.%m.%Y') as deadline, p.priority_name, s.status_name, k.projektname,ku.vname, ku.nname
FROM ticket AS t
JOIN priority AS p ON t.priority = p.id
JOIN status AS s ON t.status = s.id
JOIN db2.projekte AS k ON t.project = k.id
JOIN db2.ansprechpartner AS ku ON user.ap_id = ku.id
WHERE t.id = '3'

Es kommt die Fehlermeldung:
#1054 - Unknown column 'user.kbm_id' in 'on clause'

Darauf hin habe ich es wie folgt versucht:

Code:
SELECT t.id, t.title, FROM_UNIXTIME(t.create_date, '%d.%m.%Y') as create_date, t.description, t.media, FROM_UNIXTIME(t.deadline, '%d.%m.%Y') as deadline, p.priority_name, s.status_name, k.projektname,ku.vname, ku.nname
FROM ticket AS t, user AS u
JOIN priority AS p ON t.priority = p.id
JOIN status AS s ON t.status = s.id
JOIN db2.projekte AS k ON t.project = k.id
JOIN db2.ansprechpartner AS ku ON u.ap_id = ku.id
WHERE t.id = '3'

Es kommt die Fehlermeldung
#1054 - Unknown column 't.priority' in 'on clause'

Ich habe auch dran gedacht es so zu versuchen..
Code:
....
FROM ticket AS T LEFT JOIN user ON

... jedoch gibt es keine Referenzierung zwischen der Tabelle
ticket und user. Nur zwischen den Tabellen
ticket -> user_ticket
und
user_ticker -> user.


Kann mir noch mal jemand auf die Sprünge helfen?
Vielen Dank schon mal.
 
Zurück
Oben