27. januar 2003 - 09:43Der 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...
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.
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
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.
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
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?
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...
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
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.