moidaschl
Vollzeit-Hackler
|
Also Problemstellung:
Alle von euch werden sicher so clanseiten kennen, dass wenn man auf members klickt, kommen mal die squads und wenn man dann auf einen bestimmten spieler klickt bekommt man die einzelen infos mit foto usw..
Ok, bis jetzt noch kein Problem. I versuch sowas für einen Handballverein zu erstellen, nur leider folgendes Problem:
Es kann sein, dass ein Spieler in mehreren "Squads" gleichzeitig ist, allerdings wie realisier ich des am besten?
Mein Lösungsvorschlag:
In der Tabelle des Spielers ein Feld mit einem Ensprechenden Wert.
zb für Männer ein 'A'. für Frauen ein 'B'. Auch wenns unlogisch is, angenommen ein Spieler spielt bei beiden, dann würde dort 'AB' drinnen stehen. Nur jetz muss ich des ja mit substr() oder so irgendwie herausfiltern welcher buchstabe drinnen steht, damit ja dann nur die spieler korrekt ausgegeben werden, die im squad vorhanden sind.. Allerdings wie durchsuche ich dann ein bestimmtest Feld nach einem Zeichen? Geht des überhaupt?
Oder denk ich vieel zu kompliziert? Gibts ja sicher einen Lösungsweg i hoff ihr könnts mir da helfen
(big) tia
Daschl
Bearbeitet von moidaschl am 04.12.2004, 20:39
|
rettich
Legendwaffle, waffle!
|
viiiel zu kompliziert. du brauchst eine intersection table zwischen "squad" und "spieler", die nur einträge über die id vom spieler und die id der squad enthält
für jede zuteilung von spieler zu squad einen eintrag.
dann per join aus der DB kitzeln
select * from squads sq join intersectiontable it on sq.oid = it.squad.oid join spieler s on s.oid = it.spieler oid
-> hast alle squads mit den passenden spielern.
|
semteX
begehrt die rostschaufel
|
wie rettich schon sagte, viel zu kompliziert
besser ist das:
3 tabellen.
tabelle 1: spieler tabelle 2: spieler_squads tabelle 3: name_squads
tabelle 2 enthält: id, spieler_id, squad_id
tabelle 3 enthält: id, name
das würd dann z.b. so aussehen
tabelle1:
id=1 name=Hans position=honk
tabelle2:
id=(wurscht) spieler_id=1 squad_id=2
tabelle3:
id=1 name=frauen
id=2 name=männer
soda und dann das ganze noch mit (left)join zusammenhexeln.
mfg
|
moidaschl
Vollzeit-Hackler
|
mhm weil du des so schreibst is mir noch eine idee gekommen: wieso ned einfach, wenn einer hinzugefügt wurde, die spieler-id ( die ja auch uniqe is, also primschlüssel ), ned einfach in die tabelle squads dazu eintragen und dann die einfach wieder auslesen? des mit intersection muss ich mir noch erarbeiten, des is bahnhof atm für mich
|
rettich
Legendwaffle, waffle!
|
wieso ned einfach, wenn einer hinzugefügt wurde, die spieler-id ( die ja auch uniqe is, also primschlüssel ), ned einfach in die tabelle squads dazu eintragen und dann die einfach wieder auslesen? wie soll das gehen? in einer table "squads" hast du 2 spalten. squad_id und squad_name. wo willst das was dazu eintragen? get yourself some intersection tables.
|
moidaschl
Vollzeit-Hackler
|
stimmt, funkt ned recht scheid edit: hat wer eine ahnung, wo ich des am gscheitesten nachlesen kann mit der Join syntax? find nur http://dev.mysql.com/doc/mysql/de/JOIN.htmlund kann des da ned gscheit rauslesen.. im php q-net is auch nix darüber thx
Bearbeitet von moidaschl am 02.12.2004, 19:36
|
moidaschl
Vollzeit-Hackler
|
pff oke solved, big thx leutz der vollständigkeit halber der source: $sql = "SELECT
p.Name
FROM players p, players_teams pt
WHERE pt.Team_ID = '1';";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
echo $row['Name'];
}
}
ich hab jetz nurmal als test dem squad "männer" die ID 1 gegeben und den user "hans" dort reingeschrieben. und ich bekomm hans als ausgabe allerdings muss ich ja dann, wenn ich die leute adde zwei einträge erstellen, wenn ich den spieler in 2 teams haben will oder?
Bearbeitet von moidaschl am 02.12.2004, 20:19
|
moidaschl
Vollzeit-Hackler
|
OKE also i hab doch was verhaut, und i check genau _nix_ mehr also $sql = "SELECT
p.Name
FROM players p, players_teams pt
WHERE pt.Team_ID = '1';";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
echo $row['Name'];
}
}
so such ich mir den Namen raus. ich hab da jetz 3 Tabellen, so wie ihr oben gschrieben habts 1) players, mit unter anderem eben Name, welches ich oben auslese 2) players_teams mit ID ( prim. key ) Player_ID Team_ID 3) teams mit ID Name so nun müsste ich ja eigentlich in den players_teams immer einen eintrag hinzufügen zb: Player_ID 1 Team_ID 1 für einen Spieler mit seinem prim.schlüssel 1 und das Team mit der ID 1 ( also auch prim.schlüssel ) genau so einen eintrag hab ic jetz drinnen und 5 leute in den players. nur wenn ich in players_teams 5 einträge erstell, was ich ja müsste 1 & 1, 1 & 2, 1 & 3, 1 & 4, 1 & 5 ... dann is es ihm egal was ich da schreib, er gibt mir einfach alle namen 5x aus.. wenn ich nur bis 1 & 4 geb gibt er mir alle namen 4x aus.. wo liegt mein denkfehler? find erm ned thx
|
watchout
Legendundead
|
weil du einen full-join machst (ich glaub so heisst das...) dh. mysql gibt die jede mögliche kombination aus den 2 gegebenen tables mit den werten, die du per where ausgewählt hast. dein query müsste so irgendwie in der art aussehn... SELECT
p.Name
FROM players p
LEFT JOIN players_teams pt
ON p.Player_ID=pt.Player_ID
WHERE pt.Team_ID = '1'
|
moidaschl
Vollzeit-Hackler
|
funkt! big thx, jetz hab ichs auch gschnallt
|