• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] MySQL - Abfrage über mind. 3 Tabellen mit Pagination und Filter

scbawik

Senior HTML'ler
Hallo!

Kurz vorweg - das hier betrifft MySQL und eventuell PHP (Wobei ich beim PHP-Teil keinerlei Hilfe benötige).

Habe gerade eine totale Blockade und hoffe deshalb jemand von euch kann mir helfen.
Zum leichteren Verständnis habe ich die abgespeckte Tabellenstruktur mal aufgemalt und angehängt.

Jeder 'Benutzer' kann mehrere 'Liegenschaften' und 'Attribute' besitzen. Ziel ist jetzt eine nach Benutzern gegliederte Ausgabe der Liegenschaften zu erstellen:

- Benutzer 1:
- Liegenschaft 1
- Liegenschaft 2
- Liegenschaft 3
- Benutzer 2:
- Liegenschaft 4
- Liegenschaft 5
- usw

Zudem sollte nach (einem oder mehreren) Attribute gefiltert werden können. Sprich, nur Benutzer, denen das Attribut XY zugewiesen ist, dürfen ausgegeben werden. Bspw. nur von Privatpersonen.

Und wenn das alles nicht schon reichen würde, möchte ich das ganze noch in Seiten unterteilen mit variablen Einträgen pro Seite, zB bei Einstellung 5 Einträge pro Seite:

<!-- Seite 1 -->
- Benutzer 1:
- Liegenschaft 1
- Liegenschaft 2
- Liegenschaft 3
- Liegenschaft 4
- Liegenschaft 5
<!-- Seite 2 -->
- Benutzer 1:
- Liegenschaft 6
- Liegenschaft 7
- Benutzer 2:
- Liegenschaft 8
- Benutzer 3:
- Liegenschaft 9
- Liegenschaft 10
<!-- Seite 3 -->
...

Da es sich um eine "extreme" Datenmenge handelt (> 50000 Einträge in den Benutzer- und Liegenschafts-Tabellen) habe ich leider nicht die Möglichkeit das mit Hilfe von PHP 'hinzubiegen' und denke es wird daher eine reine MySQL-Lösung fällig. Da bei MySQL aber alles außer INSERT, UPDATE und SELECT meinen Horizont übersteigt, habe ich keinen Plan wie ich hier ein gute, leistungsschonende Lösung produziere. Vielleicht mit einer VIEW? Wenn ja, wäre ich über ein Beispiel oder ein gutes Tutorial sehr erfreut. Wenn nein, wäre ich dennoch über eine Lösung für mein Problem sehr erfreut :)

Ich danke schon vielmals im Voraus!
 

Anhänge

  • example.jpg
    example.jpg
    84,1 KB · Aufrufe: 11
Werbung:
Hallo und Danke!

Das hilft mir schonmal weiter, jetzt weiß ich zumindest wonach ich suchen kann.

Probiert habe ich noch nichts konkretes, ich plane diese Abfrage gerade.
Allerdings war mir schon während der Planung bewusst, dass ich mit simplem Anfänger-SQL nicht weit kommen werde.

Halt - stop (Klick). Habe gerade nebenbei ein paar Artikel zur Normalisierung überflogen. Die Normalisierung bezeichnet ja nur gewisse Regeln zum Aufbau einer optimalen Datenbank - wenn ich das jetzt richtig verstanden habe. Wenn du dir mein angehängtes Bild mal ansiehst, siehst du aber dass meine Datenbank bereits weitestgehend 'normalisiert' ist.

Zumindest denke ich das.

Ich suche also keine Anleitung zum Aufbau einer Datenbank - ich suche eher einen Denkanstoß zur optimalen Ausgabe über mehrere Tabellen einer bestehenden Datenbank.

Wenn es allerdings grundlegende Probleme an meinem Aufbau geben sollte, bin ich natürlich für Verbesserungsvorschläge offen.
 
Werbung:
Hallo,

da gebe ich dir recht, auf dem ersten blick ist der DB aufbau ok.
in dem Link oben ist auch beschrieben wie man die ausgabe macht, einfach mal am ende der seite auf weiter klicken, aber am besten natürlich auch mal lesen :O).

Cheffchen
 
o_O den Link hast aber erst nachträglich hinzugefügt? Aber egal, bin sowieso via Google auf Peter Kropff's Seiten gelandet :)

Mann, Mann, Mann. Da habe ich wohl viel zu kompliziert gedacht. Natürlich waren mir JOINs ein Begriff und jetzt ist mir auch klar wie ich das lösen werde.

Irgendwie habe ich gemeint, JOIN's wären für das nicht geeignet bzw. dass es etwas besseres (vorallem leichter zu lesen und nachzuvollziehen) gibt. Das wird jetzt nämlich ziemlicher Spaghetti-Code.

Also, danke dir!
 
Also das hat jetzt soweit super geklappt. Jetzt ist mir allerdings bei einer weiteren Abfrage die nur die Tabellen Benutzer und Liegenschaft betrifft ein Problem aufgefallen.

Ich möchte alle Benutzer ausgeben, denen auch eine Liegenschaft zugewiesen ist. Wenn einer keine hat, soll er nicht ausgegeben werden. Das klappt auch mit dieser Abfrage:

Code:
SELECT b.* FROM Benutzer b, Liegenschaft l WHERE b.deleted = ? AND b.id = l.user_id AND b.aktiv = ? ORDER BY b.name LIMIT 0,50

Leider ist es jetzt so, dass sämtliche Benutzer die mehrere Liegenschaften besitzen genauso oft ausgegeben werden. Mir ist schon klar wieso das so ist (b.id = l.user_id trifft mehrfach zu), nur leider nicht wie ich das verhindern kann :)

GESCHAFFT:
Wie so oft findet man den Fehler kurz nachdem man jemanden fragt -.-
Code:
SELECT DISTINCT b.* FROM Benutzer b, Liegenschaft l WHERE b.deleted = ? AND b.id = l.user_id AND b.aktiv = ? ORDER BY b.name LIMIT 0,50
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben