Avatar billede nickern Nybegynder
22. august 2007 - 16:04 Der er 25 kommentarer og
1 løsning

Udtrække titel fra en db og brugerid fra en anden, og brugernavn

Hejsa

Jeg sidder og skal lave noget "de sidste 5 indlæg" og vil i den forbindelse udtrække, brugerens navn, samt hvilket indlæg han har besvaret, som jeg så vil trække ud, og vise.

Pt. bruger jeg denne kode, men den viser ikke noget

    <?php
   
        $q = @mysql_query("SELECT COUNT(id) AS count FROM ch_reviews_comments ORDER BY ID DESC LIMIT 5 WHERE rid = '$id'");
        $r = @mysql_fetch_assoc($q);

        $qu = @mysql_query("SELECT * FROM ch_reviews_comments WHERE rid = '$id'");
        if (@mysql_num_rows($qu) != 0)
        {
            while ($r = @mysql_fetch_array($qu))
            {
                $que = @mysql_query("SELECT username FROM ch_users ORDER BY ID DESC LIMIT 5 WHERE id = '". $r["uid"] ."'");
                $auth = @mysql_fetch_assoc($que);
{

echo "<tr class='txt'><td>'". $auth["username"] ."'</td><td>$q["titel"]</td><td>Læs mere</td></tr>";

}}}
?>
Avatar billede supersquirrel Nybegynder
22. august 2007 - 16:06 #1
Erhm, hvad er der med de der "@"?
Avatar billede michael_stim Ekspert
22. august 2007 - 16:07 #2
@ er til at afvise evt fejlmeddelser (som nickern ellers ville have gavn af da hans sql er forkert)
Avatar billede nickern Nybegynder
22. august 2007 - 16:08 #3
en anden der har lavet dette script... men det fungerer på den side, hvor jeg har taget det fra (altså MIN underside), som viser brugernavn og kommentaren
Avatar billede michael_stim Ekspert
22. august 2007 - 16:09 #4
SELECT COUNT(id) AS count FROM ch_reviews_comments WHERE rid = '$id' ORDER BY ID DESC LIMIT 5

Altså WHERE efter tabeldefinitionen
Avatar billede michael_stim Ekspert
22. august 2007 - 16:09 #5
Den der kan jeg ikke tro har fungeret.
Avatar billede nickern Nybegynder
22. august 2007 - 16:11 #6
Har selv rettet lidt til i den... Men også derfor jeg spørger her
Avatar billede michael_stim Ekspert
22. august 2007 - 16:15 #7
Men den der må kunne laves mere enkel. Har ikke tid nu, er på arbejde og på vej hjem. Men hvis nogen anden ikke kigger på den kan jeg forkorte den en del, når/hvis jeg engang har tid i aften.
Avatar billede zurekk Nybegynder
22. august 2007 - 18:18 #8
$query = mysql_query( 'SELECT ch_reviews_comments.*, ch_users.username AS byusername, ch_users.id AS byuserid FROM ch_reviews_comments LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid ORDER BY ch_reviews_comment.id DESC LIMIT 5' );

while( $row = mysql_fetch_assoc( $query ) ):

echo $row['titel'];
echo '<br />' . $row['byusername'] . '--' . $row['byuserid'];

endwhile;
Avatar billede nickern Nybegynder
22. august 2007 - 22:10 #9
zurekk - titlen ligger i ch_reviews, selve kommentaren brugeren har lagt ligger i ch_reviews_comments og endelig ligger Brugernavn i ch_users

Så jeg kan vel næppe få alle informationerne ved blot at bruge det - og når jeg indsætter det som min php-kode, funger det ikke:S
Avatar billede zurekk Nybegynder
23. august 2007 - 14:53 #10
Noget i den stil.
Det er svært at tilpasse når jeg ikke ved hvordan din database ser ud :)

$query    = mysql_query( 'SELECT ch_reviews.titel, ch_users.username, AS byusername, ch_users.id AS byuserid, ch_reviews_comments.DATO/ELLERIDVÆLGSELV AS lastpost
                        FROM ch_reviews_comment
                        LEFT JOIN ch_reviews ON ch_reviews.id=ch_reviews_comments.reviewid
                        LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid
                        ORDER BY lastpost DESC LIMIT 5'
                    );
Avatar billede nickern Nybegynder
23. august 2007 - 17:05 #11
Okay - så vidt så godt

Men den spytter ikke min variabel (USERNAME) ud: {

echo "<tr class='txt'><td>'$username'</td><td>TITEL</td><td>Læs mere</td></tr>";

}

Derudover skal jeg have, hvor der står TITEL, skal jeg have trukket topic ud - fra ch_reviews - kan du hjælpe med det?
Avatar billede zurekk Nybegynder
23. august 2007 - 18:50 #12
Forstår ikke hvad du mener :)
Avatar billede nickern Nybegynder
23. august 2007 - 18:57 #13
Jeg skal udtrække de 5 sidste brugernavne, som har skrevet en kommentar hvor brugeridet står i ch_reviews_comments og brugernavnet står i ch_users ud for samme id.

Dertil skal jeg udtrække titlen på den kommenterede tråd, som står i ch_review

Håber du forstår bedre nu:)
Avatar billede zurekk Nybegynder
23. august 2007 - 19:33 #14
Det burder du også kunne gøre med den jeg skrev.

$query    = mysql_query( 'SELECT ch_reviews.titel, ch_users.username, AS byusername, ch_users.id AS byuserid, ch_reviews_comments.DATO/ELLERIDVÆLGSELV AS lastpost
                        FROM ch_reviews_comment
                        LEFT JOIN ch_reviews ON ch_reviews.id=ch_reviews_comments.reviewid
                        LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid
                        ORDER BY lastpost DESC LIMIT 5'
                    );

Når du så laver en $row = mysql_fetch_assoc( $query ), vil brugernavn være i
$row['byusername'];
Artikel titel i
$row['titel'];

Du skal bare ændre "DATO/ELLERIDVÆLGSELV" til navnet på den række med en dato i, eller id rækken, jeg ved ikke hvad du sorterer efter.

Og "reviewid" skal ændres til rækken i ch_reviews_comments som har review id'et :)
Avatar billede nickern Nybegynder
23. august 2007 - 20:16 #15
Nu får jeg denne fejl
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in index.php on line 110

Når jeg bruger denne kode:
    <?php
   
$query    = mysql_query( 'SELECT ch_reviews.topic, ch_users.username, AS byusername, ch_users.id AS byuserid, ch_reviews_comments.id AS lastpost
                        FROM ch_reviews_comment
                        LEFT JOIN ch_reviews ON ch_reviews.id=ch_reviews_comments.rid
                        LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid
                        ORDER BY lastpost DESC LIMIT 5'
                    );
while ($row = mysql_fetch_assoc($query))
{

echo "<tr class='txt'><td>'".$row['byusername']."'</td><td>'".$row['topic']."'</td><td>Læs mere</td></tr>";

}
?>

---------------------------------------------------------
Får at hjælpe dig lidt: I ch_reviews skal jeg bruge "id" og "topic" (titlen)
I ch_reviews_comments skal jeg bruge "id" "uid" (userid fra ch_users) "rid" (artiklens id, fra ch_reviews)
I ch_users skal jeg bruge "id" og "username" (brugernavn)
---------------------------------------------------------

Jeg virker lidt håbløs - men er ikke vant til at kode på den måde, som du åbenbart koder det på - og har aldrig brugt "LEFT JOIN" - kan du evt. også forklare, hvad det er, for så kan jeg selv arbejde med, og se hvad der sker:)
Avatar billede michael_stim Ekspert
23. august 2007 - 20:40 #16
JOIN = Man joiner tabeller. Kan sammenlignes med en subselect. SELECT id FROM tabel WHERE id IN(SELECT id FROM enAndenTabel WHERE etEllerAndet).

Prøv at sætte en or die efter din SQL:

$query    = mysql_query( 'SELECT ch_reviews.topic, ch_users.username, AS byusername, ch_users.id AS byuserid, ch_reviews_comments.id AS lastpost
                        FROM ch_reviews_comment
                        LEFT JOIN ch_reviews ON ch_reviews.id=ch_reviews_comments.rid
                        LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid
                        ORDER BY lastpost DESC LIMIT 5'
                    ) or die(mysql_error());
Avatar billede nickern Nybegynder
23. august 2007 - 20:57 #17
får nu denne fejl:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS byusername, ch_users.id AS byuserid, ch_reviews_comments.id AS lastpost ' at line 1
Avatar billede zurekk Nybegynder
23. august 2007 - 21:27 #18
Der var et komma for meget :)

$query    = mysql_query( 'SELECT ch_reviews.topic, ch_users.username AS byusername, ch_users.id AS byuserid, ch_reviews_comments.id AS lastpost
                        FROM ch_reviews_comment
                        LEFT JOIN ch_reviews ON ch_reviews.id=ch_reviews_comments.rid
                        LEFT JOIN ch_users ON ch_users.id=ch_reviews_comments.uid
                        ORDER BY lastpost DESC LIMIT 5'
                    ) or die(mysql_error());
Avatar billede nickern Nybegynder
23. august 2007 - 22:11 #19
Super - nu virker det:)

Lige et sidste spørgsmål - kan jeg ikke begrænse "titel" så den kun viser 10 eller 20 tegn?
Avatar billede zurekk Nybegynder
23. august 2007 - 22:32 #20
substr( $titel, 0, 20 );
Avatar billede nickern Nybegynder
23. august 2007 - 22:39 #21
Har hørt den før - men den har aldrig fungeret for mig - og heller ikke nu:
echo "<tr class='txt'><td>".$row['byusername']."</td><td>substr($row['topic'], 0, 5 )</td><td><a href='/reviews/".$row['su']."'>Læs mere</a></td></tr>";

Hvad gør jeg galt?
Avatar billede zurekk Nybegynder
23. august 2007 - 22:48 #22
echo "<tr class='txt'><td>".$row['byusername']."</td><td>" . substr($row['topic'], 0, 5 ) . "</td><td><a href='/reviews/".$row['su']."'>Læs mere</a></td></tr>";

Husk altid " . NOGET . " eller ' . NOGET . ' til alt andet end plain text.
Variabler, funktioner etc., må ikke være indenfor dine quotes/singlequotes.
Avatar billede nickern Nybegynder
23. august 2007 - 23:01 #23
takker:)

Ligger du et svar zurekk
Avatar billede zurekk Nybegynder
23. august 2007 - 23:02 #24
Yes sir
Avatar billede nickern Nybegynder
24. august 2007 - 09:32 #25
sådan;) tak for hjælpen
Avatar billede zurekk Nybegynder
24. august 2007 - 16:01 #26
Tak for point :)
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