Avatar billede oldnick Nybegynder
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.
Avatar billede cronick Nybegynder
29. juni 2007 - 00:49 #1
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";
}
?>
Avatar billede cronick Nybegynder
29. juni 2007 - 00:51 #2
I linjen "$while($row_img = mysql_fetch_array($result)) {", skal $result ændres til $pictures..
Avatar billede oldnick Nybegynder
29. juni 2007 - 00:59 #3
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.
Avatar billede oldnick Nybegynder
29. juni 2007 - 01:13 #4
Jeg prøver lige at forklare lidt bedre. Har lavet et mok-up her : http://oldnick.dk/test/
Avatar billede cronick Nybegynder
29. juni 2007 - 09:25 #5
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']);
Avatar billede cronick Nybegynder
29. juni 2007 - 09:27 #6
Argh - igen en lille fejl.. Har kommet til at angive et $ foran nummer 2 while. Det skal naturligvis slettets (dollartegnet)..
Avatar billede oldnick Nybegynder
29. juni 2007 - 15:55 #7
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. :)
Avatar billede oldnick Nybegynder
29. juni 2007 - 15:59 #8
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
Avatar billede cronick Nybegynder
29. juni 2007 - 16:08 #9
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]\"> ";
}

}
?>
Avatar billede cronick Nybegynder
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.. :)
Avatar billede oldnick Nybegynder
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?
Avatar billede cronick Nybegynder
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? :)
Avatar billede oldnick Nybegynder
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. :)
Avatar billede cronick Nybegynder
29. juni 2007 - 23:18 #14
Svar!

Og det var så lidt.. :)
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