SQL MySql Abfrage mit mehreren Spalten

Patrick1985

Cadet 2nd Year
Registriert
Dez. 2012
Beiträge
26
Hallo,

ich stehe hier vor einen Problem mit einer Abfrage die irgendwie nicht so richtig hinhaut.

Ich bastel gerade an einem kleinen System.

Hier mal ein Beispiel:

[table="width: 400, class: grid"]
[tr]
[td]Ticket_ID[/td]
[td]Ersteller[/td]
[td]Datum[/td]
[td]Betreff[/td]
[td]Problembeschreibung[/td]
[td]Löungsvorschlag[/td]
[td]Bearbeitungsdauer[/td]
[td]Freigabe_Team[/td]
[td]Freigabe_Admin[/td]
[td]Ticket_geschlossen_Datum[/td]
[td]Ticket_geschlossen[/td]

[/tr]
[tr]
[td]1[/td]
[td]Kunde A[/td]
[td]2014-04-01[/td]
[td]Problem PC[/td]
[td]Windows kann nicht gestartet werden[/td]
[td]Festplatte defekt, Festplatte getauscht[/td]
[td]2,5[/td]
[td]x[/td]
[td][/td]
[td]2014-04-03[/td]
[td]x[/td]

[/tr]
[tr]
[td]1[/td]
[td]Kunde B[/td]
[td]2014-04-02[/td]
[td]Drucker Problem[/td]
[td]Drucker schmiert nach dem Ausdrucken[/td]
[td]Drucker gereinigt und mehrere Testläufe durchgeführt[/td]
[td]0,75[/td]
[td][/td]
[td][/td]
[td]2014-04-03[/td]
[td]x[/td]

[/tr]
[/table]

Mein folgendes Problem sind Abfragen mit mehreren Spalten, die ich irgendwie nicht so hinkriege. Es sollen keine geschlossene Tickets mehr anzeigen

Hier der Code:

Code:
SELECT * FROM Tickets WHERE `Ticket_geschlossen` NOT IN ('x') AND (`Freigabe_Team` IN ('x') OR `Freigabe_Admin` IN ('x')

An Groß und Kleinschreibung habe ich auch darauf geachtet.

Mein Ziel ist es alle geschlossene Tickets nichts anzeigen zu lassen. Es sollen aber, wenn die Ticket nicht geschlossen sind, die jeweilige Freigabe für das Team anzeigen lassen.

Aber sobald ein Haken in "Freigabe Team" oder in "Freigabe Admin" habe, zeigt es trotzdem an, obwohl das Tickets geschlossen ist.

Habe schon mehrere Schreibweise an der SQL-Befehl probiert, doch es kommt kein Ergebnis zustande.

Mache ich was falsch? Vielleicht kann mir einer ein Tipp geben!

Wenn ich nochwas unklar ausgedrückt habe, fragt ruhig, sodass ich es auch ordentlich rüberbringen kann. :)

Danke im Voraus!

Gruss
 
Zunächst einmal:
Wenn du nur einen einfachen Vergleich machst und nicht gegen eine Liste prüft würde ich nicht den Operator "IN" benutzen sondern mit "=" prüfen, das verbessert die Lesbarkeit. Außerdem solltest du mir einem Tinyint arbeiten, wenn du nur true/false Werte hast wie in "Ticket geschlossen", also 0 für false und 1 für true.

Dein eigentlicher Fehler liegt darin, dass du bei "IN" Vergleichen Probleme mit null bekommmst. Das hier sollte klappen:
Code:
SELECT *
FROM Tickets
WHERE Ticket_geschlossen <> 'x' AND (Freigabe_Team = 'x' OR Freigabe_Admin = 'x')
 
Und arbeite doch bitte nicht mit "x", sondern nimm was ausdrucksstarkes. Wenn es nur "ja" oder "nein" sein kann, dann nimm 'nen Boolean bzw. TinyInt (je nach benutzter Datenbank).

Wenn es mehr als 2 Werte gibt, dann denk dir 'ne Abkürzung aus.
 
Ok ich werde es mal umstellen dass es mit Boolean funktioniert. Das mit "x" klingt würde ich den überblick verlieren.
 
Dass deine Datenbank nicht normalisiert ist, und es niemals 2x die gleiche Ticket ID geben darf, ist dir klar?
 
Patrick1985 schrieb:
Mache ich was falsch? Vielleicht kann mir einer ein Tipp geben!
Ganz abgesehen davon, ob deine Abfrage richtig ist bzw. die Tabelle überhaupt Sinn macht:
SELECT * FROM Tickets WHERE `Ticket_geschlossen` NOT IN ('x') AND (`Freigabe_Team` IN ('x') OR `Freigabe_Admin` IN ('x'))
Ergänzung ()

UND du solltest dir mal deine Singlequotes anschauen.
 

Ähnliche Themen

R
Antworten
3
Aufrufe
789
M
Zurück
Oben