25. juni 2009 - 03:34Der er
6 kommentarer og 1 løsning
Kombinere indhold fra flere tabeller?
Hola folkens..
Jeg sidder og arbejder på et lille forumsvar/indbakke system, hvor jeg gerne skal have inputs fra flere tabeller i databasen - men hvordan gør jeg det?
Som min side ser ud nu henter jeg "ulæste" kommentarer fra blogs i min indbakke, men jeg vil ligeledes gerne have den til at hente "ulæste" kommentarer fra mit forum også. Indbakken skal derfor gerne være en blanding af "ulæste" kommentarer fra både blogs og forum. Jeg kan illustrere det på med nedenstående opbygning:
Nyeste forumsvar Hvordan gør jeg dette? (skrevet af xxx, d. xxx) Student anno 2009 - hvor mange er blevet det? (skrevet af xxx, d. xxx) Blog: Mine karakterer (skrevet af xxx, d. xxx) Hvad er jeres yndlingsslik? (skrevet af xxx, d. xxx) Blog: Turen går til Spanien (skrevet af xxx, d. xxx)
Måden hvorpå jeg henter de "ulæste" kommentarer fra blogs i min indbakke er som følgende:
<?php $query = mysql_query("SELECT * FROM blogs_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." ORDER BY time DESC LIMIT $s, $prside") or die(mysql_error()); $querytime = mysql_query("SELECT DATE_FORMAT(time, '%d.%m.%Y kl. %H:%i') as time FROM blogs_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." ORDER BY time DESC") or die(mysql_error());
while ($row = mysql_fetch_assoc($query) AND $rowtime = mysql_fetch_assoc($querytime)) {
Jeg kunne naturligvis løse det på en lettere måde ved at adskille forumsvar og blogsvar, men vil foretrække at de bliver flettet sammen af forskellige årsager ;) Håber det kan lade sig..
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Slettet bruger
25. juni 2009 - 03:37#1
Hov, kom lige i tanke om at jeg havde et bonus spørgsmål som dog ikke er et must at få svar på ;) Men vil selvfølgelig stadig sætte pris på det..!
Som det ser ud nu henter jeg det første af kommentaren som titel i indbakken. Er der en måde hvorpå jeg kan hente "overskriften" på den blog eller det topic, som den pågældende kommentar hører til i stedet?
Løsning 1: Lav to SQL-sætninger som du binder sammen med UNION. De to sql-sætninger skal have samme antal kolonner.
Løsning 2: Lav en tabel som du bruger til midlertidige data. Du kører en INSERT med data fra hhv. den ene tabel og den anden, og derefter laver du en SELECT-sætning som trækker dataene fra den midlertidige tabel.
Når du indsætter data i den midlertidige tabel kan du eventuelt også indsætte session-id, så du kan køre en sletteforespørgsel med det som kriterie når siden er indlæst.
Til dit bonusspørgsmål bliver vi nok lige nødt til at se hvordan din tabelstruktur er.
Synes godt om
Slettet bruger
25. juni 2009 - 12:43#4
Jeg syntes det var lidt for kringlet så jeg valgte i stedet at adskille forumsvar og blogsvar og dele det op på siden.. Men jeg brugte dog din union metode til at tælle antal ulæste beskeder fra begge tabeller - så tak for det ;)
Mht. bonusspørgsmålet: I mine kommentartabel er der information om hhv. hvilket blog_id og hvilket forum_id kommentaren tilhører.
Jeg tænkte derfor at det måske kunne være muligt at sige at den skulle hente titlen fra hhv. blogs og topics, hvor id var blog_id og forum_id - hvis du forstår mig :) ?
Jamen, det kan du jo godt. Så er det jo bare at lave en separat sql-sætning, som søger efter blog_id eller forum_id i den tabel der indeholder overskrifterne.
Synes godt om
Slettet bruger
25. juni 2009 - 14:30#6
Det synes jeg også bare at jeg har prøvet, men uden held :/
Kan du give mig et hint om hvordan det skal se ud i mit tilfælde?
Synes godt om
Slettet bruger
26. juni 2009 - 17:11#7
Prøvede desuden at løse det oprindelige problem vha. af UNION metoden som du foreslog, men kan heller ikke få det til at fungere efter hensigten :/
Har prøvet med følgende uden held:
<?php $query = mysql_query("SELECT topic_id, id, userid, author, text, time, seen, parentuserid FROM forum_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." UNION SELECT blog_id, id, userid, author, text, time, seen, parentuserid FROM blogs_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." ORDER BY time DESC LIMIT $s, $prside") or die(mysql_error());
$querytime = mysql_query("SELECT DATE_FORMAT(time, '%d.%m.%Y kl. %H:%i') as time FROM forum_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." UNION SELECT DATE_FORMAT(time, '%d.%m.%Y kl. %H:%i') as time FROM blogs_comments WHERE parentuserid = ".$_SESSION['SESS_MEMBER_ID']." ORDER BY time DESC") or die(mysql_error());
while ($row = mysql_fetch_assoc($query) AND $rowtime = mysql_fetch_assoc($querytime)) {
Selv hvis ovenstående kom til at virke ville der opstå et yderligere problem i og med linket til hvert svar ikke skal være "forum.display....." men "blog.display....." når det er hentet ud fra blogs_comments databasen :S
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.