Avatar billede fangel Nybegynder
04. juni 2003 - 11:15 Der 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;

#
# Dumping data for table `forum_comment`
#

INSERT INTO forum_comment VALUES (1, 1, 1054639744, 'morten', '', 'test');
INSERT INTO forum_comment VALUES (2, 1, 1054716797, 'morten', '', '<img src=Images/(T).png><br />\r\n<br />\r\n<img src=Images/(A).png><br />\r\n<br />\r\nMorten');
# --------------------------------------------------------

#
# Table structure for table `forum_posts`
#

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:

---
Board | antalIndlaeg | IndlaegDato | KommetarDato
2 | 2 | 192344543 | 1054639744
---

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?

Morten
Avatar billede mufoxe Nybegynder
04. juni 2003 - 11:18 #1
Nøjs med  COUNT(p.*)
Avatar billede fangel Nybegynder
04. juni 2003 - 11:29 #2
Error

SQL-query :

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
Avatar billede mufoxe Nybegynder
04. juni 2003 - 11:32 #3
COUNT (p.ID) måske ?
Avatar billede fangel Nybegynder
04. juni 2003 - 11:35 #4
giver samme resultat (ikke fejl, men for mange indlæg)
Avatar billede fangel Nybegynder
04. juni 2003 - 11:35 #5
man kunne jo lave det over 2 querys, men det er der jo intet sjovt ved ;)
Avatar billede mufoxe Nybegynder
04. juni 2003 - 11:38 #6
INNER JOIN ?
Avatar billede fangel Nybegynder
04. juni 2003 - 11:42 #7
hvordan?

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...

Morten
Avatar billede mufoxe Nybegynder
04. juni 2003 - 11:46 #8
Problemet kan også være at du har p.Date og c.Date med. Prøv at fjerne dem.
Avatar billede fangel Nybegynder
04. juni 2003 - 11:47 #9
hele humlen går ud på at jeg tilsidst får:

antal indlæg | nyeste indlæg | nyeste kommentar

så jeg skal have de 2 Date felter med...

Morten
Avatar billede mufoxe Nybegynder
04. juni 2003 - 11:52 #10
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
Avatar billede fangel Nybegynder
04. juni 2003 - 11:57 #11
det er MySQL version 3.23.47 (ikke min server, men et webhotel)...

og den giver i hvert fald fejl, så tror ikke den kan... jeg må altså bare lave det så jeg bruge 2 querys og få PHP til at flette det sammen...

Morten
Avatar billede fangel Nybegynder
04. juni 2003 - 12:09 #12
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester