Ich hab eine Datenbank mit folgenden Spalten ich versuchs mal so allgemein wie möglich zu stellen damit evtl. andere auch was davon haben:
Revier,Täter,Ort,Delikt alles mit Strings als Datentyp
ich hab folgende 3 Reviere in der Datenbank: 1010, 2020, 3030
dabei unterscheiden sie sich darin, das Revier 1010 nur den Fall übernimmt falls es sich beim Täter um Hansi123 handelt, die Tat in DE(Deutschland) begangen wurde und es sich um Mord handelt Sprich in der DB stehen jeweils in den Spalten folgendes:
Täter:Hansi123
Ort: DE
Delikt:Mord
Revier:1010
dann haben wir ein zweites Revier was den Fall immer übernimmt solang es um Hansi123 geht und es ein Mord war, sprich dem Revier ist es egal wo die Tat begannen wurde also müsste das irgendwie so vermerkt werden in der DB oder kp wie ich das implementier:
Täter:Hansi123
Ort: *
Delikt:Mord
Revier:2020
* = "egal" also alle Länder der Welt
und nun das dritte Revier, das ist noch etwas Toleranter, denen ist nur wichtig das Hansi123 daran beteiligt war sprich so:
Täter:Hansi123
Ort: *
Delikt:*
Revier:3030
So ich will nun eine Abfrage machen zur DB in der ich in der Reihenfolge abfrage:
1. wird geschaut ob alles passt, wenn ja => Revier 1010 kümmert sch darum (wird im return ausgespuckt)
2. wird geschaut ob wenigstens Hansi123 und ob das Delikt ein Mord war, wenn ja Revier 2020
3. wird geschaut ob wenigstens Hansi123 daran beteiligt war, wenn ja Revier 3030
4. wenn nichts davon zutrifft irgend einen Error als return ausspucken...
mein Ansatz:
das hier klappt schön und gut, aber ja wie gesagt das ist nur einer der oben 4 genannten Schritte, ich häng genau hier fest, weil mir ne Idee fehlt wie ich das andere Implementieren soll, ich vermute mal ich muss das irgendwie mit einer If-Schleife machen, dort sagen falls q.getSingleResult() == null ist dann die zweite Abfrage, aber ich weiß nicht wie ich da quasi Implementieren muss in meine DB das es völlig egal ist für das eine Revier was für eine Tat da stattgefunden hat, oder mach ich es dann einfach so das ich in meinem Query nur zwei WHERE clauses hab wo ich eben dann nur zwei vergleiche aufstell und bei der dritten Abfrage eben nur ein WHERE hab und da nur taeter vergleich?
==> Problem ist doch wenn ich so darüber nachdenke wenn ich dann nur nach dem Täter und dem Delikt frage wird mir das doch am Ende wieder ne Liste auspucken weil dann beispielsweise bei der Zweiten Abfrage Revier 1010 als auch Revier 2020 auf die WHERE clauses passen oder? Hab ich grad einen Denkfehler?
liebe Grüße, Casio
Revier,Täter,Ort,Delikt alles mit Strings als Datentyp
ich hab folgende 3 Reviere in der Datenbank: 1010, 2020, 3030
dabei unterscheiden sie sich darin, das Revier 1010 nur den Fall übernimmt falls es sich beim Täter um Hansi123 handelt, die Tat in DE(Deutschland) begangen wurde und es sich um Mord handelt Sprich in der DB stehen jeweils in den Spalten folgendes:
Täter:Hansi123
Ort: DE
Delikt:Mord
Revier:1010
dann haben wir ein zweites Revier was den Fall immer übernimmt solang es um Hansi123 geht und es ein Mord war, sprich dem Revier ist es egal wo die Tat begannen wurde also müsste das irgendwie so vermerkt werden in der DB oder kp wie ich das implementier:
Täter:Hansi123
Ort: *
Delikt:Mord
Revier:2020
* = "egal" also alle Länder der Welt
und nun das dritte Revier, das ist noch etwas Toleranter, denen ist nur wichtig das Hansi123 daran beteiligt war sprich so:
Täter:Hansi123
Ort: *
Delikt:*
Revier:3030
So ich will nun eine Abfrage machen zur DB in der ich in der Reihenfolge abfrage:
1. wird geschaut ob alles passt, wenn ja => Revier 1010 kümmert sch darum (wird im return ausgespuckt)
2. wird geschaut ob wenigstens Hansi123 und ob das Delikt ein Mord war, wenn ja Revier 2020
3. wird geschaut ob wenigstens Hansi123 daran beteiligt war, wenn ja Revier 3030
4. wenn nichts davon zutrifft irgend einen Error als return ausspucken...
mein Ansatz:
Java:
public String responsibleRevier(String taeter, String ort, String delikt) {
Query q = em.createQuery("SELECT a.Revier FROM Polizeistation a WHERE a.taeter = :taeter AND a.ort = :ort AND a.delikt = :delikt );
q.setParameter("taeter", taeter);
q.setParameter("ort", ort);
q.setParameter("delikt", delikt);
String revier = (String) q.getSingleResult();
return revier;
das hier klappt schön und gut, aber ja wie gesagt das ist nur einer der oben 4 genannten Schritte, ich häng genau hier fest, weil mir ne Idee fehlt wie ich das andere Implementieren soll, ich vermute mal ich muss das irgendwie mit einer If-Schleife machen, dort sagen falls q.getSingleResult() == null ist dann die zweite Abfrage, aber ich weiß nicht wie ich da quasi Implementieren muss in meine DB das es völlig egal ist für das eine Revier was für eine Tat da stattgefunden hat, oder mach ich es dann einfach so das ich in meinem Query nur zwei WHERE clauses hab wo ich eben dann nur zwei vergleiche aufstell und bei der dritten Abfrage eben nur ein WHERE hab und da nur taeter vergleich?
==> Problem ist doch wenn ich so darüber nachdenke wenn ich dann nur nach dem Täter und dem Delikt frage wird mir das doch am Ende wieder ne Liste auspucken weil dann beispielsweise bei der Zweiten Abfrage Revier 1010 als auch Revier 2020 auf die WHERE clauses passen oder? Hab ich grad einen Denkfehler?
liebe Grüße, Casio