Gruppensystem (Strukturierung)

marvinlol

Erfahrenes Mitglied
Hi,

ich brauche mal einen Strukturierungs-Denkanstoß.

Ich möchte ein Gruppensystem machen, in dem jeder User in jede Gruppe eintreten kann und diese dann in seinem Profil ausgegeben werden.
(Prinzip wie z.B. studiVZ oder schülerVZ)

Das Problem ist, dass ich im Moment nicht weiß, wie ich die Datenbank-Tabellen und das Script strukturieren soll.

Brauche ich nur eine Tabelle, oder brauche ich zwei Tabellen?

Vielleicht hat ja jemand eine Idee, wie ich das stukturieren kann und wie ich das Ganze dann später in PHP umsetzen könnte.
 
Du brauchst, um genau zu sein, drei Tabellen: eine für die Nutzer in der jedem eine Nutzer-ID zugewiesen wird, eine für die Gruppen in der jeder eine Gruppen-ID zugewiesen wird und dann noch eine in der Einträge enthalten sind, wo den Nutzer-IDs je eine Gruppen-ID zugewiesen wird.
 
Vielen dank !

Genau so hatte ich mir das auch schon gedacht.

Tabellenstruktur sieht so aus:

In `gruppen` sind die einzelnen Gruppen gespeichert (groupID, name, info usw.)

In `gruppen_mitglieder` sind die Felder `gmID` (GruppenmitgliedsID), groupID (Die Gruppe, in der der User ist), userID (Der User der in der Gruppe ist).


Habt Ihr eine Idee, wie ich dann die Datenbank ansprechen muss, damit im profil alle Gruppen ausgegeben werden ?

Man muss ja Theoretisch beide Tabellen ansprechen.
Ich hatte mir etwas wie
Code:
WHERE userID= ' ".$_SESSION['user_id']." '

gedacht.
Aber ich weiß halt nicht, wie ich den Rest schreiben soll.
Danke für Hilfe !
 
Oh oh. Dann lies doch lieber ein allgemeines Buch das in SQL einführt ;)
http://books.google.de/books?id=Y3u...i=POZ9StuMLaCGygSbv9W3Cg#v=onepage&q=&f=false
(gibts auch auf Deutsch)

Das geht per JOIN oder auch ganz einfach über das SELECT:
Code:
SELECT `tabelle1`.`feld`, `tabelle3`.`feld`
FROM `tabelle1`, `tabelle2`, `tabelle3`
WHERE
     `tabelle1`.`BenutzerId` = `tabelle2`.`userID`
  && `tabelle2`.`gruppenID` = `tabelle3`.`gruppenID`
  && ......

Wobei "tabelle2" die Verknüpfungen beinhaltet ;)

Das wäre dir aber auch in den Texten zu Normalisierung erklärt und gezeigt worden : P
 
Des kannst du dann ja so machen

PHP:
<?php
$sql = "SELECT t1.*,t2.*,t3.* FROM user t1, gruppen t2, zugehoerigkeit t3 WHERE userID = '".$_SESSION['user_id']."'";
$result = mysql_query($sql) OR die(mysql_error());
..
?>

:)
 
PHP:
<?php
$sql = "SELECT t1.*,t2.*,t3.* FROM user t1, gruppen t2, zugehoerigkeit t3 WHERE userID = '".$_SESSION['user_id']."'";

Kann mir vorstellen, dass das so nicht geht, da userID als mehrdeutig angezeigt wird und bei Erfolg trotzdem alle Einträge dreifach vorhanden sind. Es fehlt die Zuordnung untereinander.
Von der verkürzten Schreibweise sehe ich persönlich ab, da es meiner Meinung nach Performance kostet wenn (my-)SQL die Aliase verstehen und zurückwandeln muss.
 
Vielen dank für eure antworten!

Ich komme nur nicht weiter jetzt.

Jetzt bekomme ich immer alle Gruppen ausgegeben.
Und die so oft, wie man in gruppen drin ist.
Also bin ich in drei Gruppen bekomme ich 3x die komplette Liste aller Gruppen.
Bin ich nur in 1, bekomme ich die Liste aller Gruppen nur einmal.

Hier mal der Code:

PHP:
$id = $_GET['id'];
$sql = "SELECT t2.*,t3.* FROM  gruppen t2, gruppen_mitglieder t3 WHERE userID = '".$_GET['id']."'";
$result = mysql_query($sql) OR die(mysql_error()); 

while($gruppen=mysql_fetch_array($result)) {
echo "".$gruppen['name']."<br />";
}

Ich hoffe ihr könnt helfen!
 
Ahh sorry ich hatte ZodiacXP´s Post nicht gesehen.

Ja genau!
Kannst du dein Beispiel, welches du oben geschrieben hattest ein bisschen erläutern?

Ich steige da für mein Beispie nicht durch.
Muss ich denn die `users` tabelle ansprechen?

Die Id des users bekommt das Script über $_GET['id']

Danke..
 
Code:
SELECT `tabelle1`.`feld_deiner_wahl`, `tabelle3`.`feld_deiner_wahl`
FROM `tabelle1`, `tabelle2`, `tabelle3`
WHERE
     `tabelle1`.`BenutzerId` = `tabelle2`.`benutzerID`
  && `tabelle2`.`gruppenID` = `tabelle3`.`gruppenID`
  && (deine Bedingungen)

tabelle1 = Benutzer
tabelle2 = Zugehörigkeit
tabelle3 = Gruppen

Probier es mal in phpMyAdmin oder ähnlichen aus, dann siehst den Effekt schnell ;)
Oder lies dir Artikel zu Normalisierung durch, die helfen auch.
 
Zurück