Kære udviklere,
Nu er jeg ved at komme godt igang med et nyt blog-system til privat brug. Jeg er bare stødt ind i et problem med nogle joins.
Jeg er igang med at lave alm. blogindlæg på min forside, hvor jeg så også skal have vist hvor mange kommentarer der findes til dette indlæg (om det er 0 eller flere). Jeg tænkte at jeg ville gøre det med INNER JOIN, men så viser den kun de indlæg hvor min kommentar-tabel kan relatere til (ud fra antallet). Så gik jeg over til LEFT JOIN, hvor det også fungerede fint - indtil at jeg smid en ekstra kommentar i et af mine indlæg (dvs. 2 kommentarer).
- $db->mysql_open();
- mysql_set_charset('utf8');
- $db->query("SELECT * FROM blog INNER JOIN types ON blog.blogType = types.typesId INNER JOIN kategorier ON blog.FK_katId = kategorier.kategorierId LEFT JOIN comments ON comments.FK_blogId = blog.blogId ORDER BY blogDate DESC");
- $result = $db->fetchAll();
- foreach($result as $row):
- $day = date("d", strtotime($row["blogDate"]));
- $month = date("n", strtotime($row["blogDate"]));
- $year = date("Y", strtotime($row["blogDate"]));
-
- $months = array(01 => "januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december");
-
- $days = array("Monday" => "Mandag", "Tuesday" => "Tirsdag", "Wednesday" => "Onsdag", "Thursday" => "Torsdag", "Friday" => "Fredag", "Saturday" => "Lørdag", "Sunday" => "Søndag");
-
- $date = $month . "/" . $day . "/" . $year;
- $dateget = getdate(strtotime($date));
-
- if(mysql_num_rows($db->query) == 0)
- {
- ?>
- <div class="and">
- <h3>Ingen resultater fundet</h3>
- <span>
- <p>
- Bloggen har endnu ikke nogle indlæg.<br />
- Kontakt mig for at foreslå nogle indlæg.
- </p>
- </span>
- <div class="clear"></div>
- </div>
- <?php
- }
- else
- {
- ?>
- <div class="<?=$row["typesNavn"]?>">
- <h3><?=$row["blogTitel"]?></h3>
- <span>
- <ul>
- <li><img src="<?=$menu->menu()?>img/clock.gif" alt="date" />
- <?=$days[$dateget['weekday']]." d. ".$day." ".$months[$month].", ".$year?></li>
- <li><img src="<?=$menu->menu()?>img/paper.gif" alt="cat" />
- <a href="<?=$menu->menu()?>category/<?=$row["kategorierId"]?>/"><?=$row["kategorierNavn"]?></a></li>
- <li><img src="<?=$menu->menu()?>img/comments.gif" alt="com" />
- <a href="<?=$menu->menu()?>blog/<?=$row["blogId"]?>/#comments"><?=count($row["comId"])?> Comments</a></li>
- </ul>
- <p>
- <?php
- if(strlen($row["blogTekst"]) > 200)
- {
- echo substr($row["blogTekst"], 0, 200) . "...";
- }
- else
- {
- echo $row["blogTekst"];
- }
- ?><br /><br />
-
- <a href="<?=$menu->menu()?>blog/<?=$row["blogId"]?>/" class="more">Læs mere</a>
- </p>
- </span>
- <div class="clear"></div>
- </div>
- <?php
- }
- endforeach;
- $db->mysql_close();
Problemet ligger i denne sektion
- SELECT * FROM blog INNER JOIN types ON blog.blogType = types.typesId INNER JOIN kategorier ON blog.FK_katId = kategorier.kategorierId LEFT JOIN comments ON comments.FK_blogId = blog.blogId ORDER BY blogDate DESC
Det problem jeg får nu er at den "dublikerer" min indlæg hvor der er mere end en kommentar. Den viser mit indlæg med ID 4, 2 gange. Syntes selv at det virker mærkeligt, men det er måske klart nok at den gør det.
Brug af SQL og Foreach fungerer fint, da det er lavet til Objekt Orienteret. Så det er ikke dét som er problemet.
Det jeg gerne vil have ud af koden er eksempelvis:
0 COMMENTS - ved 0 kommentarer
1 COMMENT - ved 1 kommentar
2 COMMENTS - ved 2 kommentarer
...osv
Den skriver bare
1 COMMENT1 COMMENT(altså 2 indlæg med det samme indhold)
- når der findes 2 kommentarer til et indlæg.
Håber at der er nogle som kan hjælpe.
Med venlig hilsen,
Daniele Buttigli
P.S. Eksempel kan ses her:
link
Indlæg senest redigeret d. 02.05.2012 20:03 af Bruger #16025