webForumDet fria alternativet

SQL strul i mySQL

7 svar · 217 visningar · startad av mozilla

mozillaMedlem sedan juli 20011 202 inlägg
#1
"SELECT n.object_ID,n.user_ID,u.nickname,
n.news_topic,n.news_msg,n.news_date,
(SELECT Count(object_ID) FROM tblComment WHERE object_ID = n.object_ID AND type_ID = 1) 
FROM tblNews n,tblUser u 
WHERE n.user_ID = u.user_ID 
ORDER BY n.news_date DESC LIMIT 0,5"

Hur får jag denna SQL satsen att fungera i mySQL? Jag har vänt
och vridit på den ett bra tag nu utan att komma till någon bra
lösning? Problemet ligger i att jag vill Hämta ut antalet
kommentarer till varje nyhet, men mySQL klagar vid ",(SELECT..."

Editerad för att öka läsbarhet/LarsG

LarsGMedlem sedan dec. 200012 465 inlägg
#2
SELECT n.object_ID,n.user_ID,u.nickname,
n.news_topic,n.news_msg,n.news_date,
Count(c.object_ID) 
FROM tblNews n join tblUser u 
  on  n.user_ID = u.user_ID 
left join tblComment C
  on n.object_id = c.object_id
group by n.object_ID,n.user_ID,u.nickname,
n.news_topic,n.news_msg,n.news_date
ORDER BY n.news_date DESC 
LIMIT 0,5

Du får nog vänta någon/några versioner till innan det finns skalär subselect i mysql.

mozillaMedlem sedan juli 20011 202 inlägg
#3

Microsoft OLE DB Provider for ODBC Drivers (0x80040E09) skrev:

[TCX][MyODBC]You have an error in your SQL syntax near 'ON n.user_ID = u.user_ID LEFT JOIN tblComment c ON n.object_id = c.object_id GRO' at line 1

Fick dock error när jag testade din kod?

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Det finns inget syntaxfel i min kod ;)

Hur ser det ut i din kod? Är det PHP eller ASP? Kan du lägga till en utskift av statementet innand du skickar den till mysql? Kanske det saknas någon blank vid radbrytning?

mozillaMedlem sedan juli 20011 202 inlägg
#5
SELECT n.object_ID,n.user_ID,u.nickname,
n.news_topic,n.news_msg,n.news_date,
Count(c.object_ID) 
FROM tblNews n [b]left[/b] join tblUser u 
  on  n.user_ID = u.user_ID 
left join tblComment C
  on n.object_id = c.object_id
group by n.object_ID,n.user_ID,u.nickname,
n.news_topic,n.news_msg,n.news_date
ORDER BY n.news_date DESC 
LIMIT 0,5

Om jag lägger till left i koden fungerar det tillfredsställande. Dvs. jag får ut den information som jag vill ha. Det kan inte vara så att de ska vara ett "left" där? :stud

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Nej, kanske kan vara så att mysql kräver att det står inner join. Jag tittar i Mysql dokumentationen. Enligt standard sql sä är ordet inner inte nödvändigt.

Byt left mot inner för left join och inner join är inte samma sak.

mozillaMedlem sedan juli 20011 202 inlägg
#7

Jo, det fungerar bra med INNER, men vad är det för skillnad mellan INNER och LEFT?

LarsGMedlem sedan dec. 200012 465 inlägg
Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb