WN

WN (https://www.wn.se/forum/index.php)
-   Webbhotell (https://www.wn.se/forum/forumdisplay.php?f=13)
-   -   Har Loopia ändrat något idag? (https://www.wn.se/forum/showthread.php?t=25205)

totoo 2007-11-22 00:23

Jag borde kanske maila deras support....

Flera av mina siter på loopia har idag delvis slutat fungera... Det är mysqlfrågor som jag får error på (som har körts klockrent i över ett år innan).

Ett exempel är t.ex:

Unknown column 'p.editUser' in 'on clause'

SELECT u.uname, u.id, u.sex, u.city, u.score, u.numWarnings, u.numPosts, u.createDate as regDate, u.signature, p.*, pt.text, ue.uName as editUname FROM (com_posts p, users u, com_post_texts pt LEFT JOIN users ue ON (ue.id = p.editUser AND p.editUser > 0)) WHERE p.threadId = 1033 AND u.id = p.createUser AND pt.postId = p.postId ORDER BY p.createDate ASC LIMIT 0, 20

Någon mer som fått problem eller vet vad det kan bero på? Är det något dumt i min syntax som inte är godkänt i någon ny mysql-version eller liknande?

Och ja - tabellen och fältet ifråga finns och det är rättstavat.

totoo 2007-11-22 00:53

STORT tack, det hjälpte!

tjo1 2007-11-22 01:20

Loopia skulle väl uppdatera sina mysqlservrar till 5.någonting mellan 21 & 22 nov tror jag

EmilIsberg 2007-11-22 09:48

Citat:

Ursprungligen postat av totoo
Jag borde kanske maila deras support....

Ja tack, det får du väldigt gärna göra.

Citat:

Ursprungligen postat av totoo
Flera av mina siter på loopia har idag delvis slutat fungera... Det är mysqlfrågor som jag får error på (som har körts klockrent i över ett år innan).

Vi uppgraderade de två sista kundmysql-servrar till MySQL 5.0.45 igår vid 04:00.

MySQL har publicerat en lista på ändringar mellan 4.1 och 5.0 på:
http://dev.mysql.com/doc/refman/5.0/...-from-4-1.html

Du bör kontrollera vilka kontaktadresser du har angett för ditt konto hos oss då vi har skickat ut information gällande uppgraderingen till alla berörda konton.

totoo 2007-11-22 11:29

Emil - ett tips är att ni skickar ut mail även till ÅF om detta, eftersom mina kunder kanske inte har något tekniskt intresse/förstånd själva.
Kan inte ni skicka en kopia på detta brev till info snabel-a deserveit.se? Det vore välkommet.

Men i övrigt... Problemet då som tråden handlar om - det är alltså en bugg eller handlar det om att mysql helt enkelt vill ha någon annan typ av logik i frågesyntaxen? Om det är en bugg (som jag uppfattar det som) så kan man ju tycka att mysql-versionen var rätt kass.

najk 2007-11-22 12:29

Citat:

It is not a bug. Now MySQL 5 is in compliance with some rules of SQL that I'm not very
familiar with. By adding the parenthesis we are giving priority to the implicit join
expressed by the comma; after that JOIN, LEFT JOIN, RIGHT JOIN works the same way it used
to work in previous version.

Citerat från länken i post #2 i denna tråd.

EmilIsberg 2007-11-22 12:41

Citat:

Ursprungligen postat av totoo
Problemet då som tråden handlar om - det är alltså en bugg eller handlar det om att mysql helt enkelt vill ha någon annan typ av logik i frågesyntaxen?


Jag anser personligen att bakåtkompatibilitet är att föredra, särskilt när det gäller hur fråge-syntaxen tolkas.
Dock verkar det som om MySQL anser att den tidigare syntaxen var en bugg även om den ofta användes.

Buggen som Kjette länkade har rätt mycket matnyttig information och är rekommenderad läsning:
Citat:

Originally posted by http://bugs.mysql.com/bug.php?id=13832+--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (http://bugs.mysql.com/bug.php?id=13832)
With regards to William Finn's comment that changing the order of the joins helps, this is
true but is a misleading solution. Essentially William's query becomes the following:
Kod:

SELECT * FROM t2 join (t1 left join t3 on t1.a = t3.c)
This is different than what is intended by the original query:
Kod:

SELECT * FROM (t1 JOIN t2) LEFT JOIN t3 ON t1.a = t3.c
Which is still different than what the server is *actually* trying to do:
Kod:

SELECT * FROM t1 JOIN (t2 LEFT JOIN t3 ON t1.a = t3.c)
[/b]



Citat:

Originally posted by -http://bugs.mysql.com/bug.php?id=13832

If you read the comments in this bug report, your join clearly falls into the category of
statements that are affected by recent changed to the optimizer. Your query is expected
not to work as written, because of the order of tables in the FROM clause and the use of a
LEFT JOIN, which binds more tightly than the comma.

<!--QuoteBegin--http://bugs.mysql.com/bug.php?id=13832
@

It is not a bug. Now MySQL 5 is in compliance with some rules of SQL that I'm not very
familiar with. By adding the parenthesis we are giving priority to the implicit join
expressed by the comma; after that JOIN, LEFT JOIN, RIGHT JOIN works the same way it used
to work in previous version.
[/quote]

Sammanfattningsvis är orsaken att MySQL helt har skrivit om SQL-tolken (optimizer) för att mer strikt följa SQL-standarden samt bättre hantera mer komplicerade frågor (där det exempelvis finns flera nyckelfält på tabeller).

<!--QuoteBegin--http://dev.mysql.com/doc/refman/5.0/en/join.html[/i]
SELECT u.uname, u.id, u.sex, u.city, u.score, u.numWarnings, u.numPosts, u.createDate as regDate, u.signature, p.*, pt.text, ue.uName as editUname FROM (com_posts p, users u, com_post_texts pt LEFT JOIN users ue ON (ue.id = p.editUser AND p.editUser > 0)) WHERE p.threadId = 1033 AND u.id = p.createUser AND pt.postId = p.postId ORDER BY p.createDate ASC LIMIT 0, 20[/quote]

Tidigare (4.x) kördes ihopslagningen (JOIN) av com_posts, users (u), com_post_texts innan users (ue), men numera (5.x) slås com_post, users (ue) ihop innan users (u) och com_post_texts.

Om jag tolkar MySQL-manualen rätt borde följande återfå det beteende som var innan 5.0.1:
Kod:

SELECT u.uname, u.id, u.sex, u.city, u.score, u.numWarnings, u.numPosts, u.createDate as regDate, u.signature, p.*, pt.text, ue.uName as editUname FROM ((com_posts p, users u, com_post_texts pt) LEFT JOIN users ue ON (ue.id = p.editUser AND p.editUser > 0)) WHERE p.threadId = 1033 AND u.id = p.createUser AND pt.postId = p.postId ORDER BY p.createDate ASC LIMIT 0, 20

totoo 2007-11-22 13:08

Det är lika bra att inse... Jag är helt enkelt inte tillräckligt bra på mysql om man gräver på djupet... :)

Jag ser inte riktigt logiken i varför det blir som det blir och varför det inte blev så förut, men det kommer väl med tiden... :)

Stort tack till er iaf!


Alla tider är GMT +2. Klockan är nu 01:18.

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