Problem bei Sortierung bzw. Abfrage

Martys

Erfahrenes Mitglied
Hallo zusammen,

stehe vor einem Problem, welches ich mit meinen Grundkenntnissen in MySQL momentan einfach nicht in den Griff bekomme bzw auch gar nicht weiss, ob man es so lösen kann.

Ich habe eine DB mit diversen Feldern, darunter eines für eine Gruppenzugehörigkeit (GRUPPE) und eins für die Anzeigeposition (SORT) innerhalb dieser Gruppe.
Nun soll es aber auch möglich sein, einen Eintrag zwei Gruppen (GRUPPE und GRUPPE1) zuzuordnen und auch dort eine Anzeigenposition (SORT1) zu vergeben.

Die einzelnen Gruppenname lasse ich mir vorher in ein Array ausgeben, später werden diese mittels for-Schleife an den Browser ausgeben.
Das ein Eintrag in zwei Gruppen dargestellt wird habe ich hiermit geschafft:

PHP:
$abfrage = "SELECT * FROM test WHERE test.AKTIV='1' AND test.GRUPPE='$gruppen_id[$c]' OR test.GRUPPE1='$gruppen_id[$c]' ORDER BY SORT ASC";

Wie könnte man den Eintrag, der bei GRUPPE1 ausgegeben wird auch an die richtige Position sortieren lassen?

Vielen Dank schon mal für Hinweise und Tipps,

Martys
 
Hi,

darf ich kurz zusammenfassen :)

-> eine Tabelle (User(?))
-> eine Tabelle (Gruppen)

Ein User aus der User-Tabelle kann mehreren Gruppen zugeordnet werden?
Dann benötigst du eine 3. Tabelle in der die Relationen erfasst sind.

-> Tabelle (usr_grp_relations) mit folgenden Feldern:
rid (relation_id)
uid (user_id)
gid (grp_id)
sid (sort_id für eine explizite Sortierung kannst Du in dieser Tabelle ebenfalls vornehmen.)

So können alle IDs (bis auf rid) mehrfach vorkommen um eine solche Beziehung zu schaffen.

Für SQL Fragen bitte nochmal auf die Darstellung eingehen, ob alles richtig ist.

Gruß tyg3r
 
Hallo Tyg3r,

danke für Deine Antwort.
Es sind zwei Tabellen, einmal wo die Gruppen zusammengefasst sind (gruppen)
und einmal wo die "User" zusammengefasst sind (test).

Den "Usern" kann man eine Gruppe zuordnen und die Position innerhalb dieser Gruppe.
Meine Aufgabe besteht darin, es zu ermöglichen, einen "User" auch einer zweiten Gruppe zuzuordnen und auch dort eine Position zu vergeben.

Meine Überlegung war, zwei Abfragen zu starten, einmal für die 1. Gruppe und einmal für die 2. Gruppe, das jeweilige Ergebnis in ein Array zu schreiben und diese beiden Arrays dann zu verbinden. Voraussetzung wäre, das die Position eines Users in 2. Gruppe bei keinem User in der 1. Gruppe vorkommt.
Die User-Tabelle (test) hat die Felder:

ID | NAME | AKTIV | GRUPPE | SORT | GRUPPE1 | SORT1

GRUPPE = Id der Gruppe aus der Tabelle "gruppen"
SORT = Position innerhalb der Gruppe (GRUPPE)
GRUPPE1 = Id der Gruppe aus der Tabelle "gruppen"
SORT1 = Position innerhalb der Gruppe (GRUPPE1)

Die Ausgabe soll später so aussehen:

GRUPPENNAME 1
- User A (Position 1 in GRUPPENNAME 1)
- User B (Position 2 in GRUPPENNAME 1)
- User C (Position 2 in GRUPPENNAME 1)

GRUPPENNAME 2
- User D (Position 1 in GRUPPENNAME 2)
- User C (Position 2 in GRUPPENNAME 2)
- User E (Position 3 in GRUPPENNAME 2)

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt.
Das DB-Design ist auch schon samt Admin-Bereich vorhanden, ich muss es nur irgendwie hinbekommen, diese Abfrage zu basteln.

Gruß,
Martys
 
Hi,

wenn es bei zwei Zuordnungen bleibt, dann ist Dein Lösungsweg definitiv der Richtige.

Da Du ein JOIN in die Gruppentabelle benötigst, lässt sich das wie Du es auch vorgeschlagen hast nur mit 2 Abfragen umsetzten:

SELECT a.name, b.gruppenname
FROM test AS a
LEFT JOIN gruppen AS b
WHERE a.gruppe = b.gruppe
ORDER BY a.sort

und

SELECT a.name, b.gruppenname
FROM test AS a
LEFT JOIN gruppen AS b
WHERE a.gruppe1 = b.gruppe
ORDER BY a.sort1

Hoffe das hilft Dir
Gruß tyg3r
 

Neue Beiträge

Zurück