Het is de eerste keer dat ik normalisatie moet toepassen en er zullen dus hoogstwaarschijnlijk hier en daar fouten zijn, neem ik aan, maar kritiek is meer dan welkom =)
*nickname = spelersnaam
*guid = unieke id, per computer, dus meerde nicknames kunnen dezelfde guid hebben
*cl_id wordt toegewezen bij het joinen van een server
COMBINATIE
id [PRIMARY KEY auto_increment]
nicknameID
guidID
INFO
id [PRIMARY KEY auto_increment]
cl_id [???]
TEAM
cl_id [???]
team
kills
deaths
geen indexen: er worden telkens nieuwe records toegevoegd/geupdate | vandaar die Primary keys
In de laatste tabel (team), kan cl_id helaas een NULL retourneren, niet alle records zijn dus uniek, en het wordt daarenboven telkens geupdated/toegevoegd, dus weet ik er weinig raad mee
nee niet in 1 tabel... je zei dat meerdere nicknames hetzelfde guid kunnen hebben. dat is een 1 op veel relatie. Je houdt ze dus wel in apparte tabellen en geeft nickname een verwijzing naar een guid.
Je probleem met je limit snap ik echter niet...? je wilt maar 1 resultaat maar met je limit ga je mis?... you've lost me...
wel met die limit... ik wil de SELECT enkel tot unieke guids beperken, dus 't is niet dat ik 1 resultaat wil hebben, maar 1 per uniek guid, waarbij ik het laatst toegewezen nickname als spelersnaam zal selecteren (dus descending orderen en dan limit 1 ofzo)
als je altijd de laatste nickname wilt selecteren per guid, dan zul je in je tabel een kolom erbij moeten maken met het type DATETIME, zo kun je de laatste selecteren.
Ik heb nu deze query, maar ik kom niet uit hoe ik die beperking kan inbouwen (enkel unieke guids toegekend aan laatst toegevoegde nickname)
SELECT p.nickname,
g.guid,
t.team,
t.kills,
t.deaths
FROM players AS p
INNER JOIN guids AS g
ON p.nickname = g.nickname
INNER JOIN team as t
ON g.guidID = t.guidID
ORDER BY datetime DESC
ik heb het nu kunnen omzeilen met een extra attribut (nieuw varchar(3) DEFAULT 'ja').
Dus als we ervan uitgaan dat er 0 records in de db zijn en als ik een record toevoeg, dan is die nieuw ('ja'), maar als er nog ene record toegevoegd wordt, waarvan de guid al in de database voorkomt...dan update ik de attribut(en) van de nickname van bestaande overeenkomstige guid naar 'nee' en het nieuwe record blijft gewoon standaard 'ja', en dan laat ik enkel de records met een 'ja' zien
Dit is natuurlijk niet echt professioneel aangezien je het waarschijnlijk gewoon met een sql kunt doen (=mijn vraag in vorige post), maar ik kan het maar niet fixen =/
Mijn grootste twijfel zit in de db ontwerp, ik maak me zorgen dat ik 2 keer nickname erin heb, al gebruik i ker ene als Foreign Key (ben niet zeker of het kwaad kan)
PLAYERS
id [PK]
nickname [UNIQUE]
cl_id
GUIDS
guidID [PK]
nickname [FK]
guid
type
TEAM
guidID [FK]
team
kills
deaths
datetime
mijn doel:
<?php
$sql="SELECT type
FROM guids
WHERE nickname=".$nickname."
AND guid=".$guid."";
$res=mysql_query($sql);
if(mysql_num_rows($res)<1){
//INSERT query...type=new
}else{
//UPDATE type naar 'old' van vorige nicknames van deze guid
//INSERT query...type=new
}
?>