Just nu i M3-nätverket
Jump to content

outer join


Rest man Klaymen

Recommended Posts

Rest man Klaymen

SQL = "SELECT h.id hid,h.title,h.sent,h.visits,h.hideuser,h.site,u.id uid,u.username,u.online,COUNT(commentid) AS antalcomments FROM "

SQL = SQL & "((hands h INNER JOIN users u ON h.fromuser = u.id) LEFT OUTER JOIN comments c ON h.id = c.commentid) "

SQL = SQL & "WHERE h.hidepage = 0 AND c.type = 0 "

Vill hämta data från hands och users, och joina dem med villkoret h.fromuser = u.id. Detta fungerar. Sedan kör jag en outer join för att se hur många comments som finns på varje post i hands. Detta fungerar också. Problemet är att jag vill baka in villkoret c.type = 0 vilket ju liksom omvandlar min outer join till en inner join eftersom de poster i hands som inte har någon motsvarig post i comments ju heller inte har värdet 0 på c.type. Vad ska jag göra? Har provat villkor som:

 

c.type = 0 OR antalcomments = 0

men det fungerar ju inte eftersom antalcomments=0 måste ligga i HAVING och c.type=0 måste ligga i WHERE.

 

Har också provat med att göra varje tabell i varsin SELECT-sats, inom parenteser, sätta villkoren i varje SELECT-sats och sedan joina ihop dem. Detta kan fungera om jag lyckas göra det rätt, men det blir inte särskilt överskådligt.

 

Vad ska jag göra? Finns det något lätt sätt att lösa detta?

 

Link to comment
Share on other sites

Mr Andersson

Om du använder MSSQL :

 

WHERE h.hidepage = 0 AND isnull(c.type,0) = 0

 

Finns en liknande funktion i MySQL med vad den heter vet jag inte.

 

 

[inlägget ändrat 2007-10-08 19:13:50 av Mr Andersson]

Link to comment
Share on other sites

Rest man Klaymen

Försökte joina en till tabell, men det visade sig att MySQL inte gillar flera COUNT() i samma SELECT. Så jag byggde om lite. Men jag får svaret att Databasen inte stöder frågan.

 

	SQL = "SELECT * FROM "

SQL = SQL & "((((SELECT id hid,title,sent,visits,hideuser,fromuser FROM hands WHERE hidepage = 0) h "

SQL = SQL & "INNER JOIN (SELECT id uid,username,online FROM users) u ON h.fromuser= u.uid) "

 

Så här långt fungerar det, om jag tar bort två "(" i början. Det är de följande två tabelljoinsen som skapar problem, både en i taget och båda tillsammans.

 

SQL = SQL & "LEFT OUTER JOIN (SELECT COUNT(id) antalc,commentid FROM comments WHERE type = 0 GROUP BY commentid) c ON h.id = c.commentid) "

SQL = SQL & "LEFT OUTER JOIN (SELECT (SUM(vote)/COUNT(*)) score,voteid FROM votes WHERE type = 1 GROUP BY voteid) v ON h.id = v.voteid) "

 

Och jag vet att jag klantade och lät type representeras av 0 i comments och 1 i votes, men det ska ju inte förstöra syntaxen.

 

EDIT: båda de två sista frågorna fungerar perfekt ensamt. Det är när jag försöker joina dem i de två övre som felet uppkommer.

[inlägget ändrat 2007-10-08 22:06:37 av Rest man Klaymen]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...