Avatar billede Jeannine Nybegynder
24. februar 2009 - 10:29 Der er 4 kommentarer og
1 løsning

Repeat i en Repeat...? MySql og php

Jeg kan simpelthen ikke finde ud af hvordan jeg kan løse følgende problem:

Jeg har 2 tabeller. En med newsindhold og en med filer, der kan uploades til hver nyhed. Nu kan der jo forekomme flere filer til den samme nyhed.

Min forespørgsel er derfor:
SELECT *
FROM news LEFT JOIN newsfiler USING (newsID)
ORDER BY news.date DESC

På selve siden viser vi alle forekomster, MEN nu lægger den jo bare en række til og det er jo ikke meningen. Kan man lave en repeat inde i en repeat? Hvordan henter den så id på rækken for at kunne tilknytte den rigtige ID?

<td width="96%"><?php echo $row_news['titel']; ? <?php echo $row_news['text']; ?>
<a href="mailto:<?php echo $row_news['email']; ?>"><?php echo $row_news['email']; ?></a>
<a href="news/<?php echo $row_news['fil1']; ?>" target=\"_blank\">
<?php if ($row_news['fil1']) {echo '<img height="20" border="0" alt="L&aelig;s mere her.." src="logo_mini.gif">'; }?>
</a></td></tr></table> </td></tr></table>
<?php } while ($row_news = mysql_fetch_assoc($news)); ?>

Håber nogen kan knække gåden for mig.. ;o)
Avatar billede arne_v Ekspert
25. februar 2009 - 05:55 #1
Du kan lave en query inden i en query.

Men en enkelt query med en join og så noget kode logic der håndterer når en relevant værdi ændrer sig er nok en bedre mulighed.
Avatar billede Jeannine Nybegynder
25. februar 2009 - 07:41 #2
Hej Arne. tak for dit svar.. men det hjælper mig i virkeligheden nok ikke meget videre..;o) Hvilken query og hvilken kode skulle det være i stedet for den jeg har?
Avatar billede Jeannine Nybegynder
25. februar 2009 - 21:54 #3
hmmmm... det ender nok med noget lignende forspørgsel

SELECT *, COUNT(newsfiler.newsID) AS antal
FROM news LEFT JOIN newsfiler USING (newsID)
WHERE news.nummer = 'forside'
GROUP BY newsfiler.filID
ORDER BY news.date DESC

og så med en if sætning, der kun viser hver nyhedstitel og tekst, men alle filer ...
Avatar billede Jeannine Nybegynder
26. februar 2009 - 08:32 #4
Suk, ved bare ikke hvordan.. prøvede med UNION og JOINS osv.. men måske har jeg også formuleret det forkert.. For det jeg egentlig gerne vil, er at den skriver alle forekomster af den anden tabel inde i rækken fra den første tabel.. dvs.:

Tabel 1
newsID - titel - text

Tabel 2
filID - filnavn - newsID

Resultat af query
tabel1.newsID - tabel1.titel - tabel1.text - tabel2.filID - tabel2.filnavn - tabel2.filnavn - tabel2.filnavn..usw.. WHERE tabel1.newsID = tabel2.newsID

Kan man det overhovedet :D
Avatar billede Jeannine Nybegynder
26. februar 2009 - 12:26 #5
Bare hvis det skulle interessere nogen.. Jeg fik løst det med denne forespørgsel:
SELECT *, COUNT(newsfiler.newsID) AS antal
FROM news LEFT JOIN newsfiler ON news.newsID = newsfiler.newsID
WHERE news.nummer = 'forside'
GROUP BY news.newsID
ORDER BY news.date DESC

og så lagte jeg nogle if sætninger, hvor den viser et ikon skulle der være flere filer til en nyhed, som man kan klikke på og komme videre til en oversigt over alle filer til denne nyhedsid.
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
Kurser inden for grundlæggende programmering

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