Ich entwickle gerade ein System zur Verwaltung von Mietprozessen und frage mich, wie man alle mietbaren Objekte effizient mit dem Personennamen abfragen kann, der sie gerade vermietet wenn das Objekt im Moment vermietet ist. Andernfalls sollte in dieser Spalte NULL sein.Richtig verbinden 1: n: 1: 1 Beziehung in Mysql Datenbank
Meine Tabellen wie folgt aussehen:
Objekt
| object_id | object_name |
---------------------------
| 1 | Object A |
| 2 | Object B |
| 3 | Object C |
| 4 | Object D |
| 5 | Object E |
---------------------------
Person
| person_id | person_name |
---------------------------
| 1 | John Doe |
| 2 | Jane Doe |
| 3 | Max Muster |
| 4 | Foobar |
---------------------------
Vermietung
| rental_id | rental_state| person_person_id |
----------------------------------------------
| 1 | open | 1 |
| 2 | returned | 1 |
| 3 | returned | 2 |
| 4 | open | 3 |
| 5 | returned | 4 |
----------------------------------------------
rental2object
| rental_rental_id | object_object_id |
---------------------------------------
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 4 | 5 |
| 5 | 2 |
---------------------------------------
Das Ergebnis, das ich sollte wie folgt aussehen wollen:
| object_id | object_name | rented_to |
-------------------------------------------
| 1 | Object A | John Doe |
| 2 | Object B | Max Muster |
| 3 | Object C | NULL |
| 4 | Object D | NULL |
| 5 | Object E | Max Muster |
-------------------------------------------
Was ich bisher ist bekam:
SELECT `object_id`, `object_name`, `person_name` FROM `object`
LEFT JOIN `rental2object` ON `object_id` = `object_object_id`
LEFT JOIN `rental` ON `rental_id` = `rental_rental_id` AND `rental_state` = 'open'
LEFT JOIN `person` ON `person_id` = `person_person_id`
GROUP BY `object_id`
Das offensichtliche Problem ist dass ich nicht weiß, wie man beim Gruppieren richtig aggregiert.
Was wäre der effizienteste Weg, um mein Ziel zu erreichen? Schätze deine Hilfe.
EDIT
das erwartete Ergebnis wird korrigiert, so dass das Objekt B auch Max Muster vermietet.
Es sind Spalten in Ihrer 'SELECT'-Anweisung, die nicht in' GROUP BY' existiert. – ydoow
Objekte # 2 und # 5 sind beide in Vermietung # 4. Aber Sie gehen mit beiden auf unterschiedliche Weise auf Ihre erwarteten Ergebnisse ein. Objekt E und Objekt B sollten beide dasselbe Verhalten haben, beide mit Max Muster verwandt, ist es nicht? Warum Objekt B hat eine Null related_to Person? – danihp
Ok, ich sehe deine Bearbeitung, dann überprüfe meine Antwort, wird von einigen Muggeln abgelehnt, ich weiß nicht warum. – danihp