04. juni 2003 - 11:15Der er
10 kommentarer og 2 løsninger
LEFT JOIN, kan ikke få det til at virker ikke helt!
Hej
jeg har 2 tabeller i en database, de ser ud som dette: (dump med data)
--- # # Table structure for table `forum_comment` #
CREATE TABLE forum_comment ( ID int(11) NOT NULL auto_increment, Ref int(11) NOT NULL default '0', Date int(11) NOT NULL default '0', Name tinytext NOT NULL, Email tinytext NOT NULL, Text text NOT NULL, PRIMARY KEY (ID) ) TYPE=MyISAM;
CREATE TABLE forum_posts ( ID int(11) NOT NULL auto_increment, Date int(11) NOT NULL default '0', Board tinyint(4) NOT NULL default '0', Name tinytext NOT NULL, Headline tinytext NOT NULL, Text text NOT NULL, PRIMARY KEY (ID) ) TYPE=MyISAM;
# # Dumping data for table `forum_posts` #
INSERT INTO forum_posts VALUES (1, 192344543, 2, 'morten', 'Test af forum', 'Så tester vi det nye forumet\r\n<br />\r\n- Morten'); ---
jeg har så et query der ser ud som dette:
--- SELECT p.Board, COUNT( * ) AS antalIndlaeg, p.Date AS IndlaegDato, c.Date AS KommetarDato FROM forum_posts AS p LEFT JOIN forum_comment AS c ON c.Ref = p.ID GROUP BY p.Board ---
MEN, med følgende data i tabellerne returnere det query følgende:
som i nok kan gætte, så er det antalIndlaeg den er gal med... det burde jo blive 1, da der kun er en række i forum_posts... så hvad skal jeg ændre i mit query for at få det rigtige antal indlæg tilbage?
SELECT p.Board, COUNT( p.* ) AS antalIndlaeg, p.Date AS IndlaegDato, c.Date AS KommetarDato FROM forum_posts AS p LEFT JOIN forum_comment AS c ON c.Ref = p.ID GROUP BY p.Board LIMIT 0, 30
MySQL said:
You have an error in your SQL syntax near '* ) AS antalIndlaeg, p.Date AS IndlaegDato, c.Date AS KommetarDato FROM forum_p' at line 1
SELECT p.Board, COUNT( * ) AS antalIndlaeg, p.Date AS IndlaegDato, c.Date AS KommetarDato FROM forum_posts AS p INNER JOIN forum_comment AS c ON c.Ref = p.ID GROUP BY p.Board LIMIT 0, 30
for det giver i hvert fald også "2" som antalIndlæg...
Nu ved jeg ikke hvilken version af MySQL, du kører på, men du kan lave en subquery, hvis du har den nyeste.
Noget ala SELECT p.Board, (SELECT COUNT(*) FROM forum_comment AS C1 WHERE C1.Ref = P.ID) AS antalIndlaeg, p.Date AS IndlaegDato, c.Date AS KommetarDato FROM forum_posts AS p INNER JOIN forum_comment AS c ON c.Ref = p.ID GROUP BY p.Board LIMIT 0, 30
nu har jeg bare lavet det så den benytter sig af to query... PHP finder så ud af at flette resultatet sammen, og det ser ud til at hjælpe...
da du ikke kom med en løsning, men stadig hjalp, så dele vi pointene... håber det er OK med dig...
Morten
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.