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.

B.V.D.

Je moet een apart veld hebben voor de plaats. Het id moet je nooit wijzigen.
Dat heb ik nu toch ook?

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()); 
}


SET plaats=plaats+'1'
Gewoon 2 queries gelijk achter elkaar?

"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.

Iets logisch nadenken helpt al wel.
Misschien een voorbeeld opzoeken met een sorteerbaar menu , dat werkt exact hetzelfde :) .. en tientallen te vinden op het internet.
@Robert,

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:

Vorrbeeld:

TeamID,Plaats
1,1
2,2
3,3
4,4
5,5
6,6

Nu gaan we team 3 verhogen (dus naar plaats 4).

Query1:
TeamID,Plaats
1,1
2,2
3,3
4,3
5,5
6,6

Query2:
TeamID,Plaats
1,1
2,2
3,4
4,3
5,5
6,6
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...
Ik krijg het nog niet voor elkaar Jacsoft.
Dus ik ga maar eens zoeken na een voorbeeld zoals Jaron zei.

Iniedergeval bedankt voor de hulp
Kan dit:

"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?

Reageren