Avatar billede max33 Nybegynder
30. september 2011 - 21:22 Der er 20 kommentarer og
3 løsninger

Select - Update

Hej

Jeg vil gerne kunne lave en UPDATE og samtidigt så SELECT de emner som bliver UPDATE, hvordan skruger jeg lige det sammen?

Jeg kan ikke lave en SELECT efter jeg f.eks har lavet en UPDATE af f.eks et Status felt.

UPDATE Testtabel SET Status = 'ok' WHERE Status = 'fejl'

hvis jeg så laver en

SELECT * FROM Testtabel WHERE Status = 'ok'

Får jeg jo alle enmer som har den status og ikke kn dem jeg har ændret.

Så skal jeg lave en SELECT før UPDATE men syntes det skal kunne gøres på en gang.
Avatar billede majbom Novice
30. september 2011 - 21:31 #1
det er jeg ret sikker på at du ikke kan.
du er nødt til at gøre det af 2 gange...
Avatar billede max33 Nybegynder
30. september 2011 - 21:36 #2
Hvad så hvis jeg laver en SELECT, får et resultat med f.eks. 5 emner.

Inden mit program så laver en UPDATE er der en anden der f.eks. laver en INSERT.

Min UPDATE opdater så 6 emner men jeg ser kun de 5.....
Avatar billede Slettet bruger
30. september 2011 - 21:38 #3
Det kan muligvis lade sig gøre via en temporary table. Dvs. 1) create temporary table, 2) select dem med status "fejl" ind i din temporary table, 3) update din tabel til status "ok", og 4) select fra din temporary table.
Avatar billede arne_v Ekspert
30. september 2011 - 21:39 #4
Noegle ordet her er transaction isolation level.

BEGIN
SELECT * FROM Testtabel WHERE Status = 'ok'
UPDATE Testtabel SET Status = 'ok' WHERE Status = 'fejl'
COMMIT

vil med transaction isolation level serializable virke saaledes at der ikke kan snige sig noget ind imellem.
Avatar billede max33 Nybegynder
30. september 2011 - 21:40 #5
#3 hmm
Avatar billede max33 Nybegynder
30. september 2011 - 21:42 #6
#4 kan man det via php ?
Avatar billede arne_v Ekspert
30. september 2011 - 21:42 #7
NB: transaktioner i MySQL virker kun med InnoDB ikke med MyISAM
Avatar billede arne_v Ekspert
30. september 2011 - 21:44 #8
Det burde kunne bruges med PHP.
Avatar billede max33 Nybegynder
30. september 2011 - 21:46 #9
#7 Hvordan ser jeg forskel ?
Avatar billede arne_v Ekspert
30. september 2011 - 21:49 #10
Det boer du nemt kunne se i dit admin tool.

Bruger du PHPMyAdmin?
Avatar billede max33 Nybegynder
30. september 2011 - 21:49 #11
#10 Ja
Avatar billede majbom Novice
30. september 2011 - 22:04 #12
tryk på databasenavnet øverst i menuen i venstre side. så kommer der en liste med alle dine tabeller - her står der ud for hver tabel hvilken type det er...
Avatar billede max33 Nybegynder
30. september 2011 - 22:18 #13
Typen er MyISAM og jeg kan ikke vælge InnoDB.

Men har prøvet at køre syntax fra #4 i phpMyAdmin uden fejl...
Avatar billede max33 Nybegynder
30. september 2011 - 22:35 #14
Løser problemet ved at lave en WHERE string som indholder de ID'er som skal retter udfra min SELECT:

Select ....
while {
if($Where_ID)
$Where_ID .= " ||";
$Where_ID .= " ID = '".$row_Testtabel["ID"]."'";   
}

if(!$Where_ID)
$Where_ID = 0;

UPDATE ... WHERE $Where_ID
Avatar billede max33 Nybegynder
30. september 2011 - 22:36 #15
#10 #12 smid et svar så får i point
Avatar billede max33 Nybegynder
30. september 2011 - 22:37 #16
hmm teoretisk kan der stadig komme en rettelse til et enme som jeg ikke får med....
Avatar billede showsource Seniormester
30. september 2011 - 23:19 #17
Lyt til arne_v !
Så går aldrig galt i byen !
Avatar billede arne_v Ekspert
30. september 2011 - 23:42 #18
Med MyISAM kan du ikke bruge transaktioner.

Jeg mener at man boer skifte til InnoDB idag.

Med InnoDB og transaction isolation level serializable vil #4 virke.

#14 vil ogsaa kun opdatere dem du har selectet. Men:
- der kan komme nye raekker til og de fundne raekker kan blive opdateret mellem SELECT og UPDATE (men det behoever ikke vaere et problem)
- det virker ikke godt med rigtigt mange matches (forestil dig SQL satningen med 10000 fundne raekker!)
Avatar billede arne_v Ekspert
01. oktober 2011 - 00:36 #19
og et svar fra mig
Avatar billede arne_v Ekspert
01. oktober 2011 - 00:37 #20
Man faar ikke fejl ved at forsoege at bruge transactions md MyISAM tabeller, men det virker ikke!
Avatar billede majbom Novice
01. oktober 2011 - 12:30 #21
svsr...
Avatar billede max33 Nybegynder
02. oktober 2011 - 18:21 #22
#18

Jeg har ikke mulighed for at skifet til InnoDB.....
Avatar billede majbom Novice
02. oktober 2011 - 19:54 #23
tfp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester