SQL-hjälp: UPDATE WHERE flera tabeller..

Permalänk
Medlem

SQL-hjälp: UPDATE WHERE flera tabeller..

Halloj,

Nu sviktar mina SQL-kunskaper igen.

Jag har en Select-sats som ser ut enligt följande:

SELECT DISTINCT article.* FROM article LEFT JOIN articleUser ON (articleUser.articleId=article.id) LEFT JOIN articleCategory ON (articleCategory.articleId=article.id) WHERE headline = "something" AND (userId = 14 OR userId = 16) AND (categoryId = 1 OR category = 7);

Dvs. har jag följande tre tabeller

article id headline text numberOfViews articleUser articleId userId articleCategory articleId categoryId

Vad jag nu vill göra är en UPDATE som kommer åt samma records, för att automatiskt sätta (numberOfViews = numberOfViews+1) för samtliga records som hämtas i ovanstående SELECT-sats.

Någon som kan hjälpa mig?

Visa signatur

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkärlek för tysk tjejpop.

Permalänk

Kanske en sånhär:

UPDATE article SET article.numberOfViews = article.NumberOfViews + 1 WHERE article.Id IN ( (SELECT DISTINCT article.* FROM article LEFT JOIN articleUser ON (articleUser.articleId=article.id) LEFT JOIN articleCategory ON (articleCategory.articleId=article.id) WHERE headline = "something" AND (userId = 14 OR userId = 16) AND (categoryId = 1 OR category = 7)));

Funkar nog, har inte testat... Men något sånt.

Permalänk
Medlem

Mitt försök:

update article a, articleUser au, articleCategory ac set a.numberOfViews = a.numberOfViews + 1 where au.articleId = a.id and au.articleId = ac.articleId and a.headline = "something" and (a.userId = 14 or a.userId = 16) and (ac.categoryId = 1 or ac.category = 7)

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Tackar för hjälpen bägge två!

Leedows kod fungerade rakt av, och jag fick även en variant på hagbarddenstores kod att fungera efter lite googlande.

Frågan är, vilken variant av nedanstående är mest prestandavänlig? Eller är det skitsamma?

Hagbardenstore UPDATE article LEFT JOIN articleUser ON (articleUser.articleId=article.id) LEFT JOIN articleCategory ON (articleCategory.articleId=article.id) SET article.headline="editedagain" WHERE (userId=14 OR userId=16) AND (categoryId = 1 OR categoryId=7);

Leedow UPDATE article a, articleUser au, articleCategory ac SET a.numberOfViews = a.numberOfViews + 1 WHERE au.articleId = a.id AND au.articleId = ac.articleId AND a.headline = "something" AND (a.userId = 14 OR a.userId = 16) AND (ac.categoryId = 1 OR ac.category = 7);

Visa signatur

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkärlek för tysk tjejpop.

Permalänk
Medlem

Egentligen är det väl samma sak man gör? Minns att min lärare i databashantering pratade om det, bara det att det är en annan syntax. Jag tror inte att det kommer skilja så fruktansvärt mycket. Det du kan göra om du vill är ju att köra båda frågorna ett antal gånger (ex. i en loop) och helt enkelt mäta själv.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av HappySatan
Tackar för hjälpen bägge två!

Leedows kod fungerade rakt av, och jag fick även en variant på hagbarddenstores kod att fungera efter lite googlande.

Frågan är, vilken variant av nedanstående är mest prestandavänlig? Eller är det skitsamma?

Så lite så.

Jag hade valt den varianten som återspeglar den tidigare koden du har skrivit bäst. Alltså, att du är konsekvent i hur koden ser i din applikation. Jag tippar på att det är Hagbardenstores variant med JOIN-satser för du hade JOIN-satser i din tidigare kod.

Jag tycker det är enklare att läsa SQL utan JOIN-satser, därför använder jag det inte och därför var min lösning utan dem. Smaken som baken, men att vara konsekvent är viktigt tycker jag.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Avstängd

Re: SQL-hjälp: UPDATE WHERE flera tabeller..

Tjusgit yrke du har..

Citat:

Ursprungligen inskrivet av HappySatan
Halloj,

Nu sviktar mina SQL-kunskaper igen.

Jag har en Select-sats som ser ut enligt följande:

SELECT DISTINCT article.* FROM article LEFT JOIN articleUser ON (articleUser.articleId=article.id) LEFT JOIN articleCategory ON (articleCategory.articleId=article.id) WHERE headline = "something" AND (userId = 14 OR userId = 16) AND (categoryId = 1 OR category = 7);

Dvs. har jag följande tre tabeller

article id headline text numberOfViews articleUser articleId userId articleCategory articleId categoryId

Vad jag nu vill göra är en UPDATE som kommer åt samma records, för att automatiskt sätta (numberOfViews = numberOfViews+1) för samtliga records som hämtas i ovanstående SELECT-sats.

Någon som kan hjälpa mig?