Avatar billede gregorian Nybegynder
14. december 2003 - 18:13 Der er 38 kommentarer og
1 løsning

Hjælp til inner join, hvis det er det jeg skal bruge her.

jeg ved man kan bruge enten underforspørgelserm inner joins eller lign, men ved ikke helt hvorn det fungere endnu og vil gerne lærer det.

vil gerne have dette formindsket til en enkelt query( et enkelt okald til min db )

kode:
"
include("connect.php");
    $query1 = mysql_query("SELECT emne_id, emne FROM forum_emner");
    $query2 = mysql_query("SELECT bruger FROM forum_svar ORDER BY dato, sprg_id DESC");
   
    while($row1 = mysql_fetch_array($query1)){
        $row2 = mysql_fetch_array($query2);
    ?>
    <tr>
        <td height="40" valign="top"><? print $row1[emne];?></td>
        <td valign="top"><? $query = mysql_query("select count(*) as antal from forum_sprg WHERE emne_id = '2'"); $row = mysql_fetch_array($query); print $row[antal];?></td>
        <td valign="top"><? $query = mysql_query("select count(*) as antal from forum_svar WHERE sprg_id = '1'"); $row = mysql_fetch_array($query); print $row[antal];?></td>
        <td valign="top"><? print $row2[bruger];?></td>
        <td>&nbsp;</td>
    </tr>
    <? } ?>
"


har forsøgt mig med nogle underforespørgelser men ikke helt med helt endnu så håber i kan hjælpe mig på på vej herinde ..

tak på forhånd.

hvis det har relevants det som jeg har prøvet mig frem med så er koden her

    include("connect.php");
    $query3 = mysql_query("
        SELECT forum_svar.bruger AS svar_bruger, forum_sprg.bruger AS sprg_bruger, forum_sprg.dato AS sprg_dato,
            (SELECT COUNT(*)
            FROM forum_sprg
            WHERE bruger = 'Gregorian') AS antal
        FROM forum_sprg, forum_svar
        ORDER BY forum_sprg.sprg_id, forum_svar.dato DESC
    ");
    while($row3 = mysql_fetch_array($query3)){
        print $row3[svar_bruger]." - ".$row3[sprg_bruger]."<br>";
        print $row3[antal];
    }
Avatar billede arne_v Ekspert
14. december 2003 - 18:17 #1
Dine 2 queries har da ike ret meget med hinanden at gøre.

Hvordan vil du kombinere dem ?
Avatar billede gregorian Nybegynder
14. december 2003 - 18:21 #2
tænkte at man godt kunne sende det i en query eller er jeg helt gal på den?

det sløver jo nemlig bare min side og belaster min db at jeg skal sende 3 forespørgsler til db bare ved load af denne side.
Avatar billede whatever Nybegynder
14. december 2003 - 18:25 #3
Du kan KUN benytte joins, når der er en relation mellem tabellerne.
Avatar billede arne_v Ekspert
14. december 2003 - 18:25 #4
Så vidt jeg kan se kalder du SELECT COUNT(*) inden i din while løkke.

Det tror jeg at du skal forsøge at gøre noget ved i.s.f. at tænke på JOIN.
Avatar billede whatever Nybegynder
14. december 2003 - 18:26 #5
Hvis du har lavet dine tabeller ordenligt og indekseret dem korrekt, burde de 3 queries ikke sløve din side.
Avatar billede whatever Nybegynder
14. december 2003 - 18:30 #6
Det du har forsøgt at benytte er sub selects og ikke joins. Sub selects understøttes så vidt jeg husker kun i mysql 4+.
Avatar billede arne_v Ekspert
14. december 2003 - 18:30 #7
Og jeg forstår ikke helt at du henter rækker til den anden query inden i while løkken på
den første query - har de altid lige mange rækker ?
Avatar billede arne_v Ekspert
14. december 2003 - 18:31 #8
Muligvis er det i virkeligheden GROUP BY du leder efter.

Der kan du få COUNT(*) for hver bruger.
Avatar billede gregorian Nybegynder
14. december 2003 - 18:42 #9
forum_sprg, som indeholder de oprettede spørgsmål
sprg_id  emne_id  bruger      dato 
1        2        Gregorian    20031412
2        2        Meaa        20031312

forum_svar, som indeholder de oprettede spørgsmål svar som
sprg_id  bruger    dato            post 
1        Gregorian  20031214173547  Følgende bartons er locked:
2        Test      20031213173512  besked

forum_sprg og forum_svar er sammenkædet vha. sprg_id og opdelt så svar og spørgsmål ligger hvert for sit.


sprg_id henviser til forum_emner som indeholder alle de overordnere emner i forummet, så det er let at oprette/slette nye/gamle.
ser sådan ud:

forum_emner
emne_id  emne 
1        AMD
2        INTEL


Er denne metode da helt hen i vejret?
Avatar billede gregorian Nybegynder
14. december 2003 - 18:45 #10
jeg vil gerne have udtrukket en beregning af hvor mange spørgsmål der er oprettet og hvor mange besvarelser der samlet er i hvert emne.
Derudover skal man kunne se den sidste persons navn (altså bruger,som den hedder i db) samt emne navnet.

ligesom her:
http://www.gregorian.dk/forum/forum_liste.php

dette er bare gjort med de 3 quories som jeg gerne vil forkorte ned. ved bare ikke lige hvordan der gøres.
Avatar billede arne_v Ekspert
14. december 2003 - 18:46 #11
Dem kan du godt joine:

SELECT *
FROM (forum_sprg JOIN forum_svar ON forum_sprg.sprg_id = forum_svar.sprg_id) JOIN
    forum_emner ON forum_sprg.emne_id = forum_emner.emne_id
Avatar billede gregorian Nybegynder
14. december 2003 - 18:47 #12
så hvordan smider jeg dem her ind i en query?

$query1 = mysql_query("SELECT emne_id, emne FROM forum_emner");
$query2 = mysql_query("SELECT bruger FROM forum_svar ORDER BY dato, sprg_id DESC");


$query = mysql_query("select count(*) as antal from forum_sprg WHERE emne_id = '2'");
$query = mysql_query("select count(*) as antal from forum_svar WHERE sprg_id = '1'");
Avatar billede arne_v Ekspert
14. december 2003 - 18:48 #13
SELECT forum_emner.emne,COUNT(*)
FROM forum_sprg JOIN forum_svar ON forum_sprg.sprg_id = forum_svar.sprg_id
GROUP BY forum_emner.emne

skulle vise antal spørgsmål per emne.
Avatar billede arne_v Ekspert
14. december 2003 - 18:50 #14
Vrøvl.

SELECT forum_emner.emne,COUNT(*)
FROM forum_sprg JOIN forum_emner ON forum_sprg.emne_id = forum_emner.emne_id
GROUP BY forum_emner.emne
Avatar billede arne_v Ekspert
14. december 2003 - 18:50 #15
SELECT forum_emner.emne,COUNT(*)
FROM (forum_sprg JOIN forum_svar ON forum_sprg.sprg_id = forum_svar.sprg_id) JOIN
    forum_emner ON forum_sprg.emne_id = forum_emner.emne_id
GROUP BY forum_emner.emne
       

skulle vise antal svar per emne
Avatar billede gregorian Nybegynder
14. december 2003 - 18:50 #16
hehe.. sidder og tester det du skriver ;) og nu kommer en ny..

men hvorn skriver jeg det ud.. print $row[hvad skriver jeg her?]
Avatar billede arne_v Ekspert
14. december 2003 - 18:52 #17
Sorry - jeg kender MySQL men ikke PHP.
Avatar billede arne_v Ekspert
14. december 2003 - 18:53 #18
Gæt:

SELECT forum_emner.emne,COUNT(*) AS count

og $row[emnr] og $row[count]
Avatar billede gregorian Nybegynder
14. december 2003 - 18:53 #19
tror jeg os det er faktisk.

oki.. den finder jeg selv ud  af så, men der er en fejl i mysql-en

    include("connect.php");
    $query = mysql_query("
    SELECT forum_emner.emne,COUNT(*)
    FROM (forum_sprg JOIN forum_svar ON forum_sprg.sprg_id = forum_svar.sprg_id)
        JOIN forum_emner ON forum_sprg.emne_id = forum_emner.emne_id
    GROUP BY forum_emner.emne");
   
    while($row = mysql_fetch_array($query)){
    print $row[emne]
    }
Avatar billede gregorian Nybegynder
14. december 2003 - 18:59 #20
kan ikke lige finde fejlen, da jeg har har nogen ide om hvordan de join forbindelser virker lige nu..


håber du kan finde den for mig.
link til siden hvor jeg tester: http://www.gregorian.dk/forum/forum_liste1.php
Avatar billede arne_v Ekspert
14. december 2003 - 19:00 #21
Hvilken fejl får du ?
Avatar billede gregorian Nybegynder
14. december 2003 - 19:00 #22
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/web/web1875/forum/forum_liste1.php on line 76
Avatar billede gregorian Nybegynder
14. december 2003 - 19:01 #23
ups.,

You have an error in your SQL syntax near 'ON forum_sprg.sprg_id = forum_svar.sprg_id) JOIN forum_emner ON forum_sprg.em' at line 3
Avatar billede gregorian Nybegynder
14. december 2003 - 19:11 #24
kan du se fejlen arne_y? syntes der virker meget logisk det du har gjort, men ser ikke rigtig fejlen.
Avatar billede arne_v Ekspert
14. december 2003 - 19:22 #25
Næh.

Er sprg_id og emne_id af samme data type i tabellerne på begge sider af join ?
Avatar billede gregorian Nybegynder
14. december 2003 - 19:38 #26
forum_emner.emne_id = int(11) (unique)
forum_sprg.emne_id = int(11)

forum_sprg.sprg_id = int(11) (unique)
forum_svar.sprg_id = int(11)

det eneste der er forskelligt er at nogle af dem er er unique. kan det gøre det?
Avatar billede arne_v Ekspert
14. december 2003 - 19:40 #27
Nej.
Avatar billede gregorian Nybegynder
14. december 2003 - 19:42 #28
mangler der ikke noget her?

FROM (forum_sprg JOIN forum_svar ON forum_sprg.sprg_id = forum_svar.sprg_id)
JOIN forum_emner ON forum_sprg.emne_id = forum_emner.emne_id

i øverste linie har du forum_sprg og derpå JOIN men ikke i lininen nedenunder!
er det fordi du JOIN-er den igen bare medforum_sprg bagefter eller er det fejlen?
Avatar billede gregorian Nybegynder
14. december 2003 - 19:43 #29
ligeså du kan se hvad jeg laver.. http://www.gregorian.dk/forum/forum_liste1.phps
Avatar billede arne_v Ekspert
14. december 2003 - 20:06 #30
Jeg får bare tom side.
Avatar billede gregorian Nybegynder
14. december 2003 - 20:13 #31
weird.. den er rigtig den adresse og det virker på min..

har du andre ideer til hvad fejlen kan skyldes?
Avatar billede arne_v Ekspert
14. december 2003 - 20:15 #32
Hov det gik bedre uden det sidste s.

:-)
Avatar billede gregorian Nybegynder
14. december 2003 - 20:18 #33
;) du burde da kunne se koden med det s på da jeg har oprettet .phps filen. anyway.. nogen forslag!!
Avatar billede arne_v Ekspert
14. december 2003 - 20:26 #34
Prøv lige og erstat
  JOIN
med
  INNER JOIN
Avatar billede gregorian Nybegynder
14. december 2003 - 20:35 #35
så kommer den med denne fejl

Warning: mysql_query(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /home/web/web1875/forum/forum_liste1.php on line 85

Warning: mysql_query(): A link to the server could not be established in /home/web/web1875/forum/forum_liste1.php on line 85
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


fik det til at virke sådan her
    include("connect.php");
    $query1 = mysql_query("
    SELECT post, sprg FROM forum_svar,forum_sprg
    WHERE forum_sprg.sprg_id=forum_svar.sprg_id") or die(mysql_error());
   
    while($row1 = mysql_fetch_array($query1)){
        print $row1[post]." - ".$row1[sprg];
    }
Avatar billede arne_v Ekspert
14. december 2003 - 20:40 #36
Den fejl lyder ike som et SQL problem men som et connection problem.

Din løsning er helt lige så god som en INNER JOIN.

Så kan du jo komme videre og se om du kan få GROUP BY til at virke.
Avatar billede gregorian Nybegynder
14. december 2003 - 21:20 #37
du skal vel have dine points ;) tak for hjælpen selvom det ikke endte med helt det jeg regnede med.. Fik dog en meget bedre forståelse af join forbindelser ;)

tak!
Avatar billede arne_v Ekspert
14. december 2003 - 21:22 #38
så siger jeg tak
Avatar billede gregorian Nybegynder
14. december 2003 - 21:23 #39
du har styr på det må jeg da lige sige..

forresten den fejl du så før med den db fejl, var lige en irriterende tastefejl ;)

og hvis andre ville have det endelig resultat:

    $query1 = mysql_query("
    SELECT forum_svar.post, forum_sprg.sprg, forum_emner.emne
    FROM forum_svar,forum_sprg, forum_emner
        WHERE forum_sprg.sprg_id = forum_svar.sprg_id
        AND forum_sprg.emne_id = forum_emner.emne_id
    ") or die(mysql_error());
   
    while($row1 = mysql_fetch_array($query1)){
        print $row1[emne]." - ".$row1[post]." - ".$row1[sprg]."<br>";
    }
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