Avatar billede fangel Nybegynder
27. januar 2003 - 09:43 Der er 14 kommentarer og
1 løsning

2 query til samme tabel isamme query.... ret kryptisk...

Hej

jeg har en tabel der ser ca. sådan her ud...

ID
Ref_ID
Board
og så nogle andre, men det er ligegyldigt for spm'et...

jeg vil lave et query hvor jeg får:

"*" alle indlæg hvor board = '$board' (SELECT * FROM tabe WHERE Board = '$board')

men, så vil jeg også gerne vide hvor mange rækker der findes med Ref_ID der er det samme som ID... altså en "COUNT(*) AS antal_kommentare WHERE Ref_ID = ID...

sådan at vis der er nogle rækker der ser sådan her ud

ID, Ref_ID, Board
1,0,2
2,0,4
3,1,2
4,1,2

og så laver queryet (med board = 2), så får jeg

ID = 1
Board = 2
antal_kommentare = 2

det er ret svært at forklare... men håber i forstår...

Morten
Avatar billede jakoba Nybegynder
27. januar 2003 - 10:52 #1
For at tælle 'antal rækker hvor' må din sql kommando indeholde en GROUP BY clause der grupperer på den betingelse. Det er ikke muligt at udtrække de enkelte rækker i samme sql-query.

for at få antallet kunne du sige

$sql_kommando = "
    SELECT a.ID, COUNT(*), a.Board
    FROM dintabelsnavn as a, dintabelsnavn as b
    WHERE a.ID = b.Ref_ID
      AND a.board = b.Board
      AND b.Board = $board
    GROUP BY a.ID
";

bemærk at vi ikke kan hente feltet b.ID ud af den query, da værdien i det felt nemt kan være forskellig i de rækker der skal grupperes sammen.

mvh JakobA
Avatar billede fangel Nybegynder
27. januar 2003 - 11:00 #2
prøver det lige...
Avatar billede fangel Nybegynder
27. januar 2003 - 11:11 #3
det ser ud til at virke... (tilføjede lige en "as antal_kommentare"...)

SELECT a.ID, COUNT( * )
as antal_kommentare, a.Board
FROM forum as a,
forum as b
WHERE a.ID = b.Ref_ID AND a.board = b.Board AND b.Board = 0
GROUP BY a.ID

lægger du et svar?

Morten
Avatar billede jakoba Nybegynder
27. januar 2003 - 13:00 #4
ja da :-)
Avatar billede fangel Nybegynder
27. januar 2003 - 13:05 #5
then here you go
Avatar billede jakoba Nybegynder
27. januar 2003 - 13:10 #6
PS: er det egentlig ikke overflødigt at teste på b.Board i betingelsen?
Hvis jeg gætter meningen med din database korrekt kan der slet ikke forekomme situationer hvor a.ID = b.Ref_ID og a.Board IKKE er lig med b.Board.
Avatar billede fangel Nybegynder
27. januar 2003 - 13:12 #7
det kan du jo have ret i... ;)
Avatar billede fangel Nybegynder
27. januar 2003 - 17:16 #8
OK... det virker måske ikke af lige vel...

her har du et dump. af databasen...

#
# Table structure for table `forum`
#

CREATE TABLE forum (
  ID int(11) NOT NULL auto_increment,
  Ref_ID int(11) NOT NULL default '0',
  Headline tinytext NOT NULL,
  Text text NOT NULL,
  Board tinytext NOT NULL,
  Name tinytext NOT NULL,
  Email tinytext NOT NULL,
  date int(11) NOT NULL default '0',
  PRIMARY KEY  (ID)
) TYPE=MyISAM;

#
# Dumping data for table `forum`
#

INSERT INTO forum VALUES (12, 4, '', 'testing #4', '2', 'MFA', 'mfa@desi-dev.dk', 1043492977);
INSERT INTO forum VALUES (11, 4, '', 'testing #3', '2', 'MFA', 'mfa@desi-dev.dk', 1043492905);
INSERT INTO forum VALUES (3, 0, 'Test #3', 'test test test', '2', 'Morten Fangel', 'mfa@desi-dev.dk', 1037732614);
INSERT INTO forum VALUES (4, 0, 'Test #4', 'test test test', '2', 'Morten Fangel', 'mfa@desi-dev.dk', 1037732652);
INSERT INTO forum VALUES (14, 4, '', 'testing #6', '2', 'MFA', 'mfa@desi-dev.dk', 1043493065);
INSERT INTO forum VALUES (13, 4, '', 'testing #5', '2', 'MFA', 'mfa@desi-dev.dk', 1043492998);
INSERT INTO forum VALUES (9, 4, '', 'test test test ', '2', 'MFA', 'MFA@desi-dev.dk', 1037734444);
INSERT INTO forum VALUES (10, 4, '', 'test test test 2', '2', 'MFA', 'MFA@desi-dev.dk', 1037734503);
INSERT INTO forum VALUES (15, 4, '', 'testing #7', '2', 'MFA', 'mfa@desi-dev.dk', 1043493096);
INSERT INTO forum VALUES (16, 4, '', 'test test test #8', '2', 'MFA (gæst)', 'mfa@desi-dev.dk', 1043493977);

så burde dette retunere 2 rækker

  $SQL = "SELECT a.ID, a.Headline, a.date,  COUNT( * ) AS antal_kommentare FROM forum AS a, forum AS b WHERE a.ID = b.Ref_ID AND b.Board = '2' GROUP BY a.ID DESC";

men det gør den ik' den returnere "kun" 1... og det er den hvor der ikke er nogle kommentare til, kan det have noget med det at gøre???

vil du lige se lidt på det...

og hvis du har tid, så også gøre det sådan at den også returnere en række "Ref_Date", hvor dan har "date" for den nyeste række med Ref_ID = ID

så vil jeg blive meget glad...

Morten
Avatar billede jakoba Nybegynder
27. januar 2003 - 17:28 #9
Når du siger INSERT INTO et autoincrement felt som forum.ID kan du ikke stole på at feltet i den nye række får den værdi du angiver.

Prøv at udskrive de rækker du kan trække ud af forum, og se om ikke ID har nogen helt andre værdier.
Avatar billede fangel Nybegynder
27. januar 2003 - 18:05 #10
hmm... der er kun de rækker jeg har skrevet, der er fordi det er en test server... så se bort fra det.. man kan du se hvorfor den ikke kan få begge rækker med?
Avatar billede jakoba Nybegynder
27. januar 2003 - 23:00 #11
alligevel, prøv at trække rækkerne ud med mysql og se om de har de værdier i ID som du prøvede at give dem da du lagde dem ind.
Avatar billede fangel Nybegynder
28. januar 2003 - 17:50 #12
OK, det giver nok ikke de rigtige IDer... men det er et eller andet sted også ligemeget... kan du svare på hvorfor den ikke gør som den skal...

Morten
Avatar billede jakoba Nybegynder
28. januar 2003 - 18:24 #13
Den gør skam som den skal.

Hvis de data du arbejder på er forkerte er det en god nok grund til at det resultat du får er forkert :-))
Avatar billede fangel Nybegynder
27. februar 2003 - 16:51 #14
jakoba => jeg har fundet fejlen... den finder ikke de rækker hvor der kun findes selve "top indlæget"... altså hvor der ikke findes rækker med Ref_ID = [indlægget's id] vil du se om du kan rettet det, prøver også selv... men vil du også lige se på det...

Morten
Avatar billede fangel Nybegynder
27. februar 2003 - 16:54 #15
PS, fejlen er jo fordi query'et indeholder en

a.ID = b.Ref_ID, så hvis der ikke findes en indlæg uden kommentare bliver dette ikke listet... men hvordan man ændre det kan jeg ikke lige se, så vil du venligst se på det...

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
Vi tilbyder markedets bedste kurser inden for webudvikling

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