Ik zit met een probleem voor het sorteren van de plaats van me teams.
Voorbeeld beheer:
1. + - Naam
2. + - Naam
3. + - Naam
4. + - Naam
5. + - Naam
Als ik bijvoorbeeld bij nummer 2 op + klik dan gaat die na positie 3.
Probleem is dat ik dan 2 nummers 3 heb.
Zelfde is natuurlijk bij de -.
Ik doe het nu middels deze function
public function plaatsPlus() {
$teams_id = $_GET['teams_id'];
mysql_query("UPDATE teams SET plaats=plaats+'1' WHERE teams_id='$teams_id'") or die (mysql_error());
}
Is het mogelijk om te zorgen dat als ik bijvoorbeeld bij 3 op + klik dat de huidige nummer 3 de nummer 2 word en de nieuwe 3 word.
En dit natuurlijk ook zo werkend met -.
Dus dat je niet het probleem hebt met dubbele nummers.
public function plaatsPlus() {
$teams_id = $_GET['teams_id'];
mysql_query("UPDATE teams SET plaats=plaats+'1' WHERE teams_id='$teams_id'") or die (mysql_error());
}
"UPDATE team SET plaats=plaats-1 WHERE plaats = (SELECT plaats FROM teams WHERE teams_id='$teamd_id'); UPDATE teams SET plaats=plaats+'1' WHERE teams_id='$teams_id'""
En dat gaat fout, omdat je alle teams +1 doet, je moet in de WHERE wel aangeven dat je alleen de teams die hoger of gelijk staan dan dat nummer, in positie moeten stijgen. (plaats+1).
Daarna plaats je pas de nieuwe speler.
In het voorbeeld van Jacsoft gebeurt er uiteindelijk niet veel. De 1e query pakt 1 van de plaatsen uit de teams die dat bepaalde team ook heeft en verminderd die met 1, echter verhoogt die daarna (2e query) alle plaatsnummers weer met 1.
Dat is niet waar wat je zegt over mijn query. Mijn query gaat uit van unieke plaatsen. Ze veranderen beide dus dan maximaal 1 team.
De eerste query zoekt het team waarvan de plaats degene is welke we voor het andere team willen instellen en verlaagt die met 1. De tweede query verhoogt de plaats van het huidige team met 1. Op die manier zijn dus 2 teams omgewisseld:
UPDATE team SET plaats=plaats-1 WHERE plaats = (SELECT plaats FROM teams WHERE teams_id='$teamd_id');
Goed, de 1e query: Stel je hebt teams en plaatsen:
1,1
2,2
3,3
4,4
5,5
Wat hier in bovenstaande query hoort te gebeuren als je team_id 3 wilt veranderen:
Hij veranderd de plaats van team 3 in 3-1 = 2, je krijgt nu:
1,1
2,2
3,2
4,4
5,5
Query 1 gaat dus al fout omdat je hier al die dubbele waarde krijgt
UPDATE teams SET plaats=plaats+'1' WHERE teams_id='$teams_id';
Vervolgens doe je in deze query voor hetzelfde team_id (blijft 3, die verander je in tussentijd niet) plaats+1, dus wordt het weer:
1,1
2,2
3,3
4,4
5,5
edit
Overigens valt me nu pas op dat je $teamd_id en $teams_id gebruikt, hoe bepaal je het huidige team? Je geeft als het goed is alleen maar een enkel team_id mee en een actie voor dat team id.
Je antwoord is verre van compleet en ook niet bepaald duidelijk.
Wat verander je uiteindelijk dan?
Daarnaast snap ik ook niet waarom je de 1 tussen quotes ( ' ) zet in deze 2e query
Ja je hebt gelijk de eerste query hoort de 2e optie: plaats+1 te zijn:
"UPDATE team SET plaats=plaats-1 WHERE plaats = (SELECT (plaats+1) as plaats FROM teams WHERE teams_id='$teams_id'); UPDATE teams SET plaats=plaats+1 WHERE teams_id='$teams_id'"
Zaten wat schoonheidsfoutjes in, want was niet getest. Maar ging meer om het idee. Zo zou die beter moeten zijn...
"UPDATE team AS t1, team AS t2 SET t1.plaats = t2.plaats, t2.plaats = t1.plaats WHERE t1.teams_id = '" . $teams_id . "' AND t2.teams_id = '" . $teams_id . "'"
Of klopt dat niet? Ik heb het eerlijk gezegd niet getest en ben wel benieuwd. Kunnen aliassen wel in een update-query en kunnen aliassen wel bij dezelfde tabellen?