[mysql] Waardes van 2 rijen omwisselen

Pagina: 1
Acties:

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Ik heb een tabel met een uniek nummer en een naam.

1. Jan
2. Piet
3. Kees

Nu moet Piet nr. 1 krijgen en Jan nr. 2. Gewoon omwisselen dus. Ik kan Piet niet direct 1 geven, omdat Jan al 1 heeft dus dacht ik: "Ik zet eerst Jan op 0 en geef dan Piet een 1. Daarna zet ik Jan op 2".

Zo dus:
UPDATE naam SET id = 0 WHERE id = '1'
UPDATE naam SET id = 1 WHERE id = '2'
UPDATE naam SET id = 2 WHERE id = '0'

Maar dit werkt niet. Er veranderd niets? Alle waardes blijven gelijk. Wie helpt me?

[ Voor 14% gewijzigd door cdgrit op 06-11-2003 15:38 ]


Originele startpagina - Stadindex.nl


  • eborn
  • Registratie: April 2000
  • Laatst online: 20-08 15:45
Mag het ID wel 0 zijn? En als het echt niet werkt zal je SQL server wel een foutmelding teruggeven denk ik.

[ Voor 66% gewijzigd door eborn op 06-11-2003 15:24 ]


  • RupS
  • Registratie: Februari 2001
  • Laatst online: 22-01 12:46
Kan je het niet omdraaien? 1. wordt Piet en 2. wordt Jan?
Of denk ik nu te makkelijk? :)

En wat is "er gebeurt niets"? Ook geen foutmelding? Als het een auto increment kolom is kan je ook niet zomaar een 1 in een 0 veranderen.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Het vreemde is als ik eerste met een PHP scriptje Jan op 0 zet en daarna met een ander scriptje Piet op 1 zet en Jan op 2 werkt het wel.
Het werkt alleen niet als ik de 3 query's direct achter elkaar in 1 script uitvoer.

Is er niet gewoon een omwissel functie in MySQL?


Originele startpagina - Stadindex.nl


  • PanMan
  • Registratie: November 1999
  • Laatst online: 05-08 11:19

PanMan

Spun!

je hebt het in je query over 'rubid' en over 'id'.
Moet dat niet beide ID zijn? Die wou je toch aanpassen?

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
PanMan schreef op 06 november 2003 @ 15:35:
je hebt het in je query over 'rubid' en over 'id'.
Moet dat niet beide ID zijn? Die wou je toch aanpassen?
Ja, moet i.d.d. beide 'id' zijn, maar in de oorspronkelijke code had ik dit wel goed.

Probleem is dus nog NIET opgelost. Ik snap d'r niets van :?

Als ik het met 2 verschillende scripts doe werkt het wel, maar 3 queries achter elkaar gaat niet goed. Iemand die dat snapt?


Originele startpagina - Stadindex.nl


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Geen idee waarom dat zo is. Maar als het met twee scripts wel werkt, dan is het nu toch goed?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Nee, want ik wil 1 script draaien en niet een script draaien, even wachten en dan nog een keer. Zou toch gewoon moeten kunnen :?


Originele startpagina - Stadindex.nl


  • Johnny Goodbye
  • Registratie: Augustus 2003
  • Laatst online: 12:42
Als je nu na elke update een commit uitvoert.
dus:

update...
commit
update...
commit
update...
commit

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Johnny Goodbye schreef op 06 november 2003 @ 15:50:
Als je nu na elke update een commit uitvoert.
dus:

update...
commit
update...
commit
update...
commit
Thanx, maar het maakt geen verschil.
Het lijkt erop dat de waardes WEL verwisseld worden, maar dat ze ook vanzelf weer teruggezet worden.
Als ik eerst de waardes omwissel en dan vanuit hetzelfde script direct daarna kijk wat de waardes zijn dan zijn ze perfect omgewisseld. Als ik daarna nogmaals kijk (En dus niet weer omwissel) dan staan ze weer zoals het was.


Originele startpagina - Stadindex.nl


  • RupS
  • Registratie: Februari 2001
  • Laatst online: 22-01 12:46
cdgrit schreef op 06 november 2003 @ 15:54:
[...]

Thanx, maar het maakt geen verschil.
Het lijkt erop dat de waardes WEL verwisseld worden, maar dat ze ook vanzelf weer teruggezet worden.
Als ik eerst de waardes omwissel en dan vanuit hetzelfde script direct daarna kijk wat de waardes zijn dan zijn ze perfect omgewisseld. Als ik daarna nogmaals kijk (En dus niet weer omwissel) dan staan ze weer zoals het was.
Kan je hier wat van je code neerzetten? Dan kan ik (of iemand anders) het vanavond even uittesten. Misschien dat het ergens anders aan ligt.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
RupS schreef op 06 november 2003 @ 16:10:
[...]


Kan je hier wat van je code neerzetten? Dan kan ik (of iemand anders) het vanavond even uittesten. Misschien dat het ergens anders aan ligt.
Alvast bedankt!
Dit is de code:

PHP:
1
2
3
mysql_query("UPDATE rubrieken SET rubrid = 0 WHERE rubrid = '1'");
mysql_query("UPDATE rubrieken SET rubrid = 1 WHERE rubrid = '2'");
mysql_query("UPDATE rubrieken SET rubrid = 2 WHERE rubrid = '0");


Als ik na afloop in hetzelfde script een SELECT uitvoer zie ik dat alles perfect is omgewisseld! Als ik daarna in de database kijk is er niets veranderd. Ook opnieuw dezelfde SELECT uitvoeren geeft dan aan dat er niets verwisseld is.

Het lijkt erop dat zodra de 2e query wordt uitgevoegd MySQL nog bezig is met de 1e en de wijziging van de 2e query meeneemt in de 1e query. Bij het uitvoeren van de 3e query is hij dan nog bezig met de 2e en neemt hij in de 2e query de wijzigingen van de 3e query weer mee. Hoop dat je me snapt, maar dat is wat het lijkt. Misschien zit ik er ook wel naast hoor. Zou dit kunnen?

[ Voor 5% gewijzigd door cdgrit op 06-11-2003 16:24 ]


Originele startpagina - Stadindex.nl


  • RupS
  • Registratie: Februari 2001
  • Laatst online: 22-01 12:46
Het zal wel niet, maar probeer eens:
PHP:
1
2
3
mysql_query("UPDATE rubrieken SET rubrid = 0 WHERE rubrid = 1"); 
mysql_query("UPDATE rubrieken SET rubrid = 1 WHERE rubrid = 2"); 
mysql_query("UPDATE rubrieken SET rubrid = 2 WHERE rubrid = 0");

Je hoeft getallen niet tussen ' ' te zetten, dit geldt alleen voor strings.
Dat zal denk ik niet de oplossing zijn, dus ik kijk vanavond wel even wat er bij mij gebeurt.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
RupS schreef op 06 november 2003 @ 16:29:
Het zal wel niet, maar probeer eens:
PHP:
1
2
3
mysql_query("UPDATE rubrieken SET rubrid = 0 WHERE rubrid = 1"); 
mysql_query("UPDATE rubrieken SET rubrid = 1 WHERE rubrid = 2"); 
mysql_query("UPDATE rubrieken SET rubrid = 2 WHERE rubrid = 0");

Je hoeft getallen niet tussen ' ' te zetten, dit geldt alleen voor strings.
Dat zal denk ik niet de oplossing zijn, dus ik kijk vanavond wel even wat er bij mij gebeurt.
Nee, dat is 't helaas ook niet.
De query's zijn zeker goed, want als ik de 3 query's achter elkaar in 3 scripts uitvoer werkt het wel. De 3 query's direct achter elkaar in 1 script werkt niet. Ik draai trouwens MySQL 3.23.58. Lijkt me toch echt een bug.


Originele startpagina - Stadindex.nl


Verwijderd

is rubrid niet UNIQUE gedefinieerd?

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Verwijderd schreef op 06 november 2003 @ 16:38:
is rubrid niet UNIQUE gedefinieerd?
rubrid had ik eerst als Primaire sleutel, maar de tabel heeft nu helemaal geen primaire sleutel, of unieke waardes meer. Heb dat even verwijderd, omdat ik wou weten of het probleem daardoor kwam, maar dat is dus blijkbaar niet zo...


Originele startpagina - Stadindex.nl


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Doe even tussen de eerste twee regels:
PHP:
1
echo mysql_error();

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 29-07 17:11

Eijkb

Zo.

Als je ID veld een key of auto_increment was of iets dergelijks dan mag tie geen 0 zijn iig. Probeer het eens met een hoog ID ipv 0. Dus 1 updaten naar 9999, 2 -> 1 en 9999 -> 2. Zo ontwijk je die 0. Je kan je ID ook effe veranderen naar varchar ipv int ofzo. Ik denk dat het ´m in die 0 zit.

.


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

cdgrit schreef op 06 november 2003 @ 16:36:
[...]

Nee, dat is 't helaas ook niet.
De query's zijn zeker goed, want als ik de 3 query's achter elkaar in 3 scripts uitvoer werkt het wel. De 3 query's direct achter elkaar in 1 script werkt niet. Ik draai trouwens MySQL 3.23.58. Lijkt me toch echt een bug.
Waar heb je die commit's dan nu gelaten?

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
mysql_error() geeft niets terug.
COMMIT ertussen maakt geen verschil.
Heb het met 0 geprobeerd en met 999 en met -1, maar het werkt allemaal niet.


Originele startpagina - Stadindex.nl


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
cdgrit schreef op 06 november 2003 @ 15:18:
Ik heb een tabel met een uniek nummer en een naam.

1. Jan
2. Piet
3. Kees

Nu moet Piet nr. 1 krijgen en Jan nr. 2. Gewoon omwisselen dus. Ik kan Piet niet direct 1 geven, omdat Jan al 1 heeft dus dacht ik: "Ik zet eerst Jan op 0 en geef dan Piet een 1. Daarna zet ik Jan op 2".

Zo dus:
UPDATE naam SET id = 0 WHERE id = '1'
UPDATE naam SET id = 1 WHERE id = '2'
UPDATE naam SET id = 2 WHERE id = '0'

Maar dit werkt niet. Er veranderd niets? Alle waardes blijven gelijk. Wie helpt me?
Als die unieke nummers je primary key zijn dan wil je die ook niet omwisselen. Als die unieke nummers niet je primary key zijn, dan maak je dus een nieuw veld aan in je db die dat wel bevat en dan is je probleem opgelost.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Dit snapt niemand !!

Ik heb nu dit stukje code en zelfs op deze manier kan ik niet 2 waardes verwisselen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$query = mysql_query("SELECT naam FROM rubrieken WHERE rubrid = '1'");
$query_rubrieken_change = mysql_result($query,0);
$query = mysql_query("SELECT naam FROM rubrieken WHERE rubrid = '2'");
$query_rubrieken_with = mysql_result($query,0);

mysql_query("DELETE FROM rubrieken WHERE rubrid = '1' OR rubrid = '2'");

mysql_query("INSERT INTO rubrieken (rubrid,naam) VALUES ('2','$query_rubrieken_change'");
mysql_query("INSERT INTO rubrieken (rubrid,naam) VALUES ('1','$query_rubrieken_with'");

$query = mysql_query("SELECT naam FROM rubrieken WHERE rubrid = '1'");
echo mysql_result($query,0);
$query = mysql_query("SELECT naam FROM rubrieken WHERE rubrid = '2'");
echo mysql_result($query,0);


Ik run dit script en krijg netjes 2 waardes ge-output. Er wordt geselecteerd, verwijderd en opnieuw ingevoegd. En de output geeft aan dat ze correct zijn omgewisseld. Kijk ik in de database en wat denk je. grr... Staat het weer zoals hiervoor. En als ik even een # voor alle mysql query's plaats in dit script en hem nogmaals run (Dus alleen de select) staan de waardes weer zoals vóór de 1e keer runnen.

Zelfs na verwijderen en opnieuw invoegen kan ik GEEN 2 rijen omwisselen.
Heeft MySQL een beveiliging dat dit niet mag ofzo :?

[ Voor 9% gewijzigd door cdgrit op 06-11-2003 18:26 ]


Originele startpagina - Stadindex.nl


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
kijk eens goed naar je kleurtjes - het lijkt me sterk dat je hier geen parse error op krijgt

maar, je bent nog steeds niet goed bezig. of het uiteindelijk nou gaat werken of niet, de acties die jij wil ondernemen vereisen dat je een primary key hebt waar je dus verder van af blijft en die je als referentie voor die rows kunt gebruiken. Ik snap niet waarom je zo eigenwijs aan dit model blijft vasthouden.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
marty schreef op 06 november 2003 @ 18:25:
maar, je bent nog steeds niet goed bezig. of het uiteindelijk nou gaat werken of niet, de acties die jij wil ondernemen vereisen dat je een primary key hebt waar je dus verder van af blijft en die je als referentie voor die rows kunt gebruiken. Ik snap niet waarom je zo eigenwijs aan dit model blijft vasthouden.
Dat maakt geen verschil.
Ik heb nu de rubrid als primaire sleutel ingesteld en probeer de naam om te wisselen. In feite moet dit hetzelfde resultaat opleveren, maar ook dit krijg ik niet voor elkaar. Zelfde probleem.


Originele startpagina - Stadindex.nl


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Dat maakt geen verschil.
ik zei ook dat je naast dat unieke nummer nog een veld met een primary key aan moest maken. Wat je nu doet is nog steeds fout. je gaat namelijk een row met een primary key verwijderen en insert vervolgens weer een nieuwe row waarbij je zelf de primary key op geeft. Dat druist echt in tegen alle database conventies. NIET DOEN. Primary laat je zoals die is en ga je niet zelf nog eens veranderen.

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Ik denk dat ik weet hoe het komt, maar nog niet wat ik eraan kan doen.

Ik voer deze query uit:
PHP:
1
mysql_query("UPDATE rubrieken SET volgorde = volgorde + 3 WHERE rubrid = '1'");

Nu kijk ik in de database en iedere keer als ik dit script uitvoer wordt er niet 3, maar 6 (Jawel!) bij opgeteld. De query wordt dus dubbel uitgevoerd. Iemand die een idee heeft hoe dat kan?


Edit:
Als ik in mijn log files van Apache kijk zie ik dat ieder PHP script er dubbel in staat. Gewone afbeeldingen niet. PHP scripts worden dus dubbel geladen door Apache. why?

[ Voor 22% gewijzigd door cdgrit op 06-11-2003 18:51 ]


Originele startpagina - Stadindex.nl


  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 15-08 14:58
Ik voel mij zo'n stumper 8)7
Ben zeker 4 uur bezig geweest, maar ben eruit. Een héél klein dom lullig dingetje.
Ik had aan de linkerkant van de pagina's deze HTML tag staan [img]#[/img]. Had ik er vast neergezet, omdat daar straks een klein bannertje moet komen. Doe ik wel vaker, maar nu dus nooit meer!
Hierdoor werd iedere pagina 2 keer geladen en dus ook het script om 2 dingen om te ruilen. Ze werden dus netjes 2 keer opgeruilt wat er voor zorgt dat het blijft staan.

Goed... Ik kan weer verder, maar zak nu even door de grond 8)7... byebye...


Originele startpagina - Stadindex.nl

Pagina: 1