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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2003

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?

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse.

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

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.

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003

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)

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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2003

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

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2005

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.

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
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.

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

Trädvy Permalänk
Avstängd
Plats
Göteborg
Registrerad
Jan 2009

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?