Memberscript

X LiNe

Grünschnabel
Hi,

ich bin dabei ein Memberscript zu schreiben.
Und jetzt bin ich an einer Sache gescheitert. Ich wollte mehrere Squads einbinden und habe es so versucht...

...das ist für die Squadausgabe bestimmt...
PHP:
$sql="SELECT * FROM user_squad ORDER BY id ASC";
$result=mysql_query($sql);

while($rank=mysql_fetch_array($result)) {

...und das für die einzelnen Member in dem Squad.
PHP:
$sql_user="SELECT * FROM user WHERE squadid=".$rank[id]." ORDER BY id ASC";
$result_user=mysql_query($sql_user);

while($user=mysql_fetch_array($result_user)) {

Jetzt ist mir aufgefallen, dass ich einen einzelnen Member nicht mehrere Squads zuweisen kann. Nun wollte ich euch fragen wie ich soetwas realisieren könnte.

cya
 
Also ich nehme mal an du hast eine Tabelle, in der alle user gespeichert sind und eine zweite Tabelle mit allen Squads ... Letzendlich soll rauskommen, dass du einem user mehrere Squads und einem Squads mehrere user zuweisen kannst. Es ergibt sich eine klassische m:n Beziehung. Ich denke das lässt sich am effektivsten über eine Kreuztabelle lösen. In der Kreuztabelle speicherst du die userid und die squadid beide als PrimaryKey. Damit kann jede Kombination logischerweise nur einmal vorkommen. Das ganze lässt sich dann auch über eine einzige SQL-Abfrage auslesen in beiden Richtungen.
 
Ok danke, das habe ich soweit hinbekommen. Jetzt stehe ich vor dem nächsten Problem
Ich bin jetzt soweit, dass ich einen User in mehrere Squads bekomme mit der Kreuztabelle jetzt will ich nur noch, dass sich die user in der jeweiligen Squadtabelle untereinander reihen. Jetzt kommt bei der Ausgabe nur heraus, dass die Squads nocheinmal einzeln aufgelistet werden, etwa so

_______________
1. Squad
--------------------------
username1
_______________
1. Squad
--------------------------
username2
_______________
2. Squad
--------------------------
username1


jetzt will ich es aber so hinbekommen

_______________
1. Squad
--------------------------
username1
username2
_______________
2. Squad
--------------------------
username1

mein code sieht derzeit so aus
PHP:
$sql_user="SELECT * FROM user, user_squad, userxsquad WHERE userxsquad.squadid = user_squad.id AND user.id = userxsquad.userid ORDER BY user_squad.id, user.id";
$result_user=mysql_query($sql_user);
while($user=mysql_fetch_array($result_user)) {
	if($user[rank]<=1) {
?>

<table width="426"  border="0" cellspacing="0" cellpadding="3">
  <tr>
    <td bgcolor="#7F96BA">#4nG - <? echo $user[squad]; ?></td>
  </tr>
  <tr>
    <td bgcolor="#AAB9D1"><table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="50%"><? echo "<a href=?content=memberdetails&id=".$user[id].">".$user[nickname]."</a>"; ?></td>
        <td width="50%"><? echo "<a href=mailto:".$user[email].">".$user[email]."</a>"; ?></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td bgcolor="#7F96BA">&nbsp;</td>
  </tr>
</table>
<br>
<br>
<?
}
}
?>
 
Mhh ... dazu würde ich vorschlagen, dass du die Ausgabe nicht direkt in der While-Schleife beim Auslesen der Daten machst, sondern die Daten ersteinmal zu einem mehrdimensionalen Array oder Klassen verarbeitest. Das Array könnte dabei folgende Struktur haben:
PHP:
$squads[0]['id']; // Squad-Id vom ersten Squad
$squads[0]['users'][0]['id']; // UserId des ersten Users im ersten Squad
$squads[0]['users'][0]['nickname']; // Nickname des ersten Users im ersten Squad

Danach kannst du das Array mit Schleifen durcharbeiten und die Ausgabe darauf aufbauen.
 
Zurück