WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Sql update (https://www.wn.se/forum/showthread.php?t=1054142)

frecka 2012-07-11 18:37

Sql update
 
Varför blir detta fel? Får man inte göra LIMIT på UPDATE?
UPDATE teams_players SET level = 1 WHERE level = 0 AND team_id = {$team_id} ORDER BY joined ASC LIMIT 1

{$team_id} är en siffra

fluortant 2012-07-11 20:03

Vad får du för felmeddelande?

tartareandesire 2012-07-11 20:06

Beror på vilken databas du kör.

nosnaj 2012-07-11 20:09

ORDER BY i en UPDATE känns fel?

tartareandesire 2012-07-11 20:39

Citat:

Ursprungligen postat av nosnaj (Inlägg 20444700)
ORDER BY i en UPDATE känns fel?

I MySQL fungerar det fint.

Kekke 2012-07-11 20:44

Tror nog att du får hämta ID't första med en order by och limit och sedan köra en update på just det ID't

Conny Westh 2012-07-12 00:55

Citat:

Ursprungligen postat av frecka (Inlägg 20444689)
Varför blir detta fel? Får man inte göra LIMIT på UPDATE?
UPDATE teams_players SET level = 1 WHERE level = 0 AND team_id = {$team_id} ORDER BY joined ASC LIMIT 1

{$team_id} är en siffra


Du borde använda en subselect för att det ska funka bra:

Kod:

UPDATE teams_players SET level = 1
WHERE level = 0
AND team_id = {$team_id}
AND  joined = (Select joined FROM teams_players ORDER BY joined ASC LIMIT 1)

Vet inte riktigt vad vill ha men det kan även vara så här:

Kod:

UPDATE teams_players SET level = 1
WHERE level = 0
AND team_id = {$team_id}
AND  joined =
(
    Select joined
    FROM teams_players
    WHERE level = 0
    AND team_id = {$team_id}
    ORDER BY joined ASC LIMIT 1
)



Eller nåt i den stilen....

tartareandesire 2012-07-12 09:18

Subqueries bör undvikas så långt det är möjligt.

Citat:

UPDATE teams_players SET level = 1 WHERE level = 0 AND team_id = 1 ORDER BY joined ASC LIMIT 1
Det där fungerar som sagt var utmärkt i MySQL, åtminstone i senare versioner.

jonssondesign 2012-07-12 22:01

Då frecka verkar inte svara i tråden, kan jag kan flika förbi bara lite snabbt och fråga en sak.

Går det bra att använda flera "order by"?

Typ:

SELECT * FROM tabellnamn WHERE kolumn = 1 ORDER BY kolum1 ASC AND kolumn2 ASC LIMIT 20;

?

Jonas 2012-07-13 00:27

Citat:

Ursprungligen postat av jonssondesign (Inlägg 20444794)
Då frecka verkar inte svara i tråden, kan jag kan flika förbi bara lite snabbt och fråga en sak.

Går det bra att använda flera "order by"?

Typ:

SELECT * FROM tabellnamn WHERE kolumn = 1 ORDER BY kolum1 ASC AND kolumn2 ASC LIMIT 20;

?

Det fungerar så här:
Kod:

SELECT * FROM table WHERE column = 1 ORDER BY column1 ASC , column2 DESC LIMIT 10;
Den kommer att sortera på column1 först så att de värderna kommer först, och sortera på column2 efteråt.


Alla tider är GMT +2. Klockan är nu 05:11.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson