Dublikate ausschließen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abgefragten inhalte
array
ausgeben
code
eintrag
ergebnis
erstellen
folgendes problem
funktionieren
gefunden code
gesamter inhalt
gewollten inhalte
inhalt
kategorie
liste
profi
schleife
speichern
zweite array
-
Hallo,
ich habe folgendes Problem:
Ich habe ein kleines Blog-Script geschrieben, welches die Beiträge auf einer DB speichert. In der Tabellenzeile der Eintrage sind auch die Kategorien der einzelnen Einträge gespeichert.
Nun möchte ich eine Liste der Kategorien erstellen, logischerweise soll jede Kategorie nur einmal in dieser Liste erscheinen.
Das Script sieht bis jetzt so aus:
<?php $abfrage = "SELECT category FROM blog"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $category = $row->category; $category_blog = ucfirst($category); $eintrag = "<li><a href=\"index.php?url=blog&category=" . $category . "\">" . $category_blog . "</a></li>"; } echo "<div class=\"kasten\"><h2>Kategorien</h2><ul class=\"blog_list\">$eintrag</ul></div>"; } } } ?>
Wie mache ich es, dass jede Kategorie nur einmal ausgegeben wird?
Grüßle Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich bin keine PHP Profi, aber es müsste ja eine Vergleichsfunktion geben...
Dann kannst du ein Array erstellen, und jeden eintrag darin speichern...
Wenn du alle Einträge aus der DB ausgelesen hast, und in das Array gespeist hast, gehst du mit einer Schleife durchs Array, und vergleichst, ob es einen Eintrag in diesem Array doppelt gibt...
// EDIT:
Vergleichen müsste ja dann in etwa so gehen:
// EDIT2 - Code ein wenig korrigiert :D
// Gesamter Inhalt wurde abgefragt und in das Array gespeichert... $i = 0; $j = 0; // Eintrag [0] im Array entspricht dem 1. Inhalt, der aus der Datenbank ausgelesen wurde. while($j < $x) // Wobei $x die ermittelte Anzahl der abgefragten Inhalte ist... (10 Inhalter in der DB -> x = 10) { $i = 0; while($i < $x) { if($array[$i] == $array[$j]) { $array[$i] = '0'; // Vernichtet den doppelten Content } $i++; } $j++; }
Ist vil. ein wenig Pseudo-Code mäßig, müsste aber eig. funktionieren ;)
Jetzt hast du meiner Meinung nach 2 Möglichkeiten:
Entweder, du machst ein 2. Array, und schreibst alle Einträge die Unique (also bereits überprüft und einzigartig) sind, in dieses zweite Array, oder du bleibst bei einem Array, und überschriebst alle doppelten (nicht gewollten) Inhalte mit 0.
Später bei der Ausgabe (wieder eine Schleife...) kannst du dann je nach gewählter Variante entweder das ganze Array ausgeben, bzw. nur die Inhalte, in denen keine Null steht.
Ich hoffe, dass ich dir damit keinen Blödsinn erzähle, und das in PHP geht... In C ginge es jedenfalls :D
lg
Sincer
Beitrag zuletzt geändert: 19.12.2009 0:35:59 von sincer -
Muss das echo nicht in die Schleife?
Also so hier:
<?php $abfrage = "SELECT category FROM blog"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $category = $row->category; $category_blog = ucfirst($category); $eintrag = "<li><a href=\"index.php?url=blog&category=" . $category . "\">" . $category_blog . "</a></li>"; echo "<div class=\"kasten\"><h2>Kategorien</h2><ul class=\"blog_list\">$eintrag</ul></div>"; } } } } ?>
Beitrag zuletzt geändert: 18.12.2009 23:30:15 von zerojan -
Ich hab eine sehr einfache Lösung gefunden:
<div class="kasten"><h2>Kategorien</h2><ul class="blog_list"> <?php $abfrage = "SELECT DISTINCT category FROM blog"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $category = $row->category; $category_blog = ucfirst($category); $eintrag = "<a href=\"index.php?url=blog&category=" . $category . "\"><li>" . $category_blog . "</a></li>"; echo $eintrag; } ?> </ul></div>
Funktioniert ganz einfach mit "SELECT DISTINCT".
Trotzdem danke an alle Beiträge.
Grüßle Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage