28. juni 2007 - 23:29
Der er
13 kommentarer og 1 løsning
Join, hvor en "nyhed" i en tabel har flere "billeder" tilknyttet
Hej og god sommer. Jeg har ikke helt styr på joins og for loop. Men jeg er ret sikker på at det er det jeg skal bruge. Jeg har to tabels: : News : id head content img_nr : News img : img_id img_name Dem vil jeg gern have til at snakke samme, og lave et udtræk hvor jeg kan tilknytte flere billeder fra (News img) til en enkelt nyhed fra (News). Eks.: Nyhed (head og content) 1 img 1 img 2 Nyhed (head og content) 2 img 3 Nyhed (head og content) 3 img 4 img 5 img 6 ect. Det her er hvad jeg har nu og det skal ændres! <?php $result = @mysql_query('SELECT * FROM work, work_img WHERE work_img_id = id_img ORDER by datetime DESC'); if(!$result) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { $content = str_replace("\n", '<br/>', $row['content']); $header = $row['head']; $img = $row['img_name']; echo "<h1>$header</h1> <p>$content</p> $img"; } ?> Håber der er nogen som kan hjælpe, jeg har søgt forskellige steder, men jeg kan ikke finde en god forklaring eller kode som jeg kan modificere.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Forstår ikke helt hvad du gerne vil. Har tydet i din overskrift at du gerne vil have det lavet i én query, med join indeblandet. Men umiddelbart, ud af din kode, ser det ud til at du bare kan lave en yderligere query inde i din while, som henter billeder, som passer til din nyhed. Eks: <?php $result = @mysql_query('SELECT * FROM work ORDER by datetime DESC'); if(!$result) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { $content = str_replace("\n", '<br/>', $row['content']); $header = $row['head']; #henter tilhørende billeder $pictures = mysql_query("SELECT * FROM work_img WHERE work_img_id = '$row[id_img]'"); if(!$pictures) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } $while($row_img = mysql_fetch_array($result)) { // Her kan du udtrække det enkelte billede, ud af de tilhørende // } echo "<h1>$header</h1> <p>$content</p> $img"; } ?>
I linjen "$while($row_img = mysql_fetch_array($result)) {", skal $result ændres til $pictures..
Test lige, den kode jeg har vedlagt, er den gamle kode som nok er mere forvirrende end hjælpsom. Men nogen gange er det godt med et udgange punkt. Men jeg tester lige... :) Jeg vil gerne, kunne linke flere billeder til en query fra work tabellen.
Okey - er vist ikke helt med, men følgende metode burde virke fint til det du umiddelbart ser ud til at skulle bruge (set efter på den angivne test-side): <?php $result = @mysql_query('SELECT * FROM work ORDER by datetime DESC'); if(!$result) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { $content = str_replace("\n", '<br/>', $row['content']); $header = $row['head']; echo "<h1>$header</h1> <p>$content</p>"; #henter tilhørende billeder $pictures = mysql_query("SELECT * FROM work_img WHERE work_img_id = '$row[id_img]'"); if(!$pictures) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } $while($row_img = mysql_fetch_array($pictures)) { echo "<img src=\"$row_img[CELLENAVN_PAA_BILLEDETS_ADRESSE]\"> "; } } ?> Btw - der hvor du erstatter \n med <br/> kan gøres ved en lettere metode: nl2br($row['content']);
Argh - igen en lille fejl.. Har kommet til at angive et $ foran nummer 2 while. Det skal naturligvis slettets (dollartegnet)..
Hmm, jeg kan godt se at er lidt mærkelig. Men jeg har ændre i min tabel opsætning og nu ser den således ud: tabel navn : work_img id img work_id 1 simon02.jpg 1 2 shirt2.jpg 1 3 shirt1.jpg 2 4 mads05.jpg 2 5 mads04.jpg 3 6 laura03.jpg 3 tabel navn : work id head datetime content 1 NR.1 2007-05-17 02:07:19 Spring 07 Collection 2 NR.2 2007-05-17 02:11:26 Presummer 07 collection. 3 NR.3 2007-05-17 01:57:30 T-shirt Min kode lige nu: <?php $result = @mysql_query('SELECT * FROM work ORDER by datetime DESC'); if(!$result) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { $content = str_replace("\n", '<br/>', $row['content']); $header = $row['head']; echo "<h1>$header</h1> <p>$content</p>"; #henter tilhørende billeder $pictures = mysql_query("SELECT * FROM work_img, work WHERE work_id = work.id"); if(!$pictures) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while($row_img = mysql_fetch_array($pictures)) { echo "<img src=\"pict/work/$row_img[img]\"> "; } } ?> Den viser alle billderne ved hver "post". Den skal kun vi de billeder som hører til den bestemte "post". Tak for hjælpen indtil videre, jeg sætter virkelig pris på det. :)
tabel navn : work_img id | img | work_id ---------------------------- 1 | simon02.jpg | 1 2 | shirt2.jpg | 1 3 | shirt1.jpg | 2 4 | mads05.jpg | 2 5 | mads04.jpg | 3 6 | laura03.jpg | 3 tabel navn : work id | head | datetime | content -------------------------------------------------------------- 1 | NR.1 | 2007-05-17 02:07:19 | Spring 07 Collection 2 | NR.2 | 2007-05-17 02:11:26 | Presummer 07 collection. 3 | NR.3 | 2007-05-17 01:57:30 | T-shirt Så er det lidt mere overskueligt
Okey. Du har da vist også ændret noget inde i queryen til $pictures, ved where. Prøv dette i stedet: <?php $result = @mysql_query('SELECT * FROM work ORDER by datetime DESC'); if(!$result) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { $content = str_replace("\n", '<br/>', $row['content']); $header = $row['head']; echo "<h1>$header</h1> <p>$content</p>"; #henter tilhørende billeder $pictures = mysql_query("SELECT * FROM work_img, work WHERE work_id = '$vis[id]'"); if(!$pictures) { exit('<p>Error preforming query:' . mysql_error() . '</p>'); } while($row_img = mysql_fetch_array($pictures)) { echo "<img src=\"pict/work/$row_img[img]\"> "; } } ?>
29. juni 2007 - 16:10
#10
Igen tilføjelse / rettelse: $pictures = mysql_query("SELECT * FROM work_img, work WHERE work_id = '$vis[id]'"); -> $pictures = mysql_query("SELECT * FROM work_img WHERE work_id = '$row[id]'"); Og så lidt.. :)
29. juni 2007 - 16:26
#11
Perfekt, det ser rigtigt ud! Lige så jeg forstår det! Hvor trækkes "$row['id']" fra? Er det work eller work_img's id?
29. juni 2007 - 17:17
#12
Det er fra work. Du kan spore $row tilbage til: while($row = mysql_fetch_array($result)) { Og herfra $result til: $result = @mysql_query('SELECT * FROM work ORDER by datetime DESC'); // Hvor det her er tabellen "work" der bliver udtrækket fra.. :) - Så det virker altså som det skal nu? :)
29. juni 2007 - 22:21
#13
Ja, det gør det, Tak så meget og kom med et svar så skal du få dine velfortjente points. :)
29. juni 2007 - 23:18
#14
Svar! Og det var så lidt.. :)
Vi tilbyder markedets bedste kurser inden for webudvikling