Banner Grafik Banner Grafik
  • Mit PHP & SQL relevante Blogeinträge zeigen

    Rein optisch hat sich bis auf einen dunkleren Hintergrund und grafischen Social-Bookmark-Icons an der Seite nichts geändert. Die größere Neuerung hat sich hinter den Kulissen abgespielt, so werden in der Detailansicht zu einem Eintrag jetzt ähnliche Beiträge angezeigt - zumindest sofern diese eine gewisse Relevanz erreichen.

    Funktionieren tut dies über die Tags oder auch Schlagworte, die einem Beitrag zugeordnet sind. Wenn Beiträge eine bestimmte Anzahl an gleichen Tags haben, werden sie als verwandt betrachtet. Wobei sich diese Grenze dynmasch nach oben verschiebt, je mehr übereinstimmende Tags der Beitrag mit den meisten gleichen Tags aufweist.

    Von der Datenbank-Struktur her habe ich 2 Tabellen: Einmal die Tabelle in der die Blogeinträge sind (eld_blog, Spalten: id, ueberschrift) und dann noch die Tabelle, in der die zugehörigen Tags gespeichert sind (eld_tags, Spalten: tag, blogeintrag) - die für dieses Beispiel unrelevanten Felder in den Tabellen lasse ich mal aussen vor:

    Ich muss also die Tags auslesen, die zu meinem gerade angezeigten Beitrag gehören. Über diese kann ich dann prüfen ob andere Beiträge dieselben Tags benutzen und wieviele davon mit denen von meinem gerade angezeigten Beitrag übereinstimmen. Mit einem Join auf die blog-Tabelle kann ich dann die Überschriften und anderen Daten der jeweiligen Blogeinträge auslesen. In SQL ausgedrückt, geht das zum Beispiel so:

    1. SELECT DISTINCT (blog.id), blog.ueberschrift,
    2. (
    3. SELECT COUNT( a.id ) FROM eld_tags AS a
    4. LEFT JOIN eld_tags AS b ON a.tag = b.tag
    5. WHERE a.blogeintrag = t1.blogeintrag
    6. AND b.blogeintrag = t2.blogeintrag
    7. )
    8. AS hits FROM eld_tags AS t1, eld_tags AS t2
    9. LEFT JOIN eld_blog AS blog ON t2.blogeintrag = blog.id
    10. WHERE t1.blogeintrag = XX AND t1.tag = t2.tag
    11. AND t2.blogeintrag != XX ORDER BY hits DESC
    12. -- XX ist die ID des Blogeintrags der abgefragt wird.

    Das alles sieht zwar nach einer Menge Holz aus und man hätte es natürlich auch auf mehrere Abfragen splitten und die Berechnungen in PHP machen können. Die Lösung oben ist aber deutlich effektiver und schneller, weil man folgende Ergebnis-Tabelle zurückkriegt:

    Das Ergebnis der Datenbank Abfrage lässt sich anschließend relativ leicht mit PHP weiterverwursten. So kann man prüfen welcher Beitrag am meisten hits hat und daraus eine beliebige Relevanzgrenze berechnen, usw. Die SQL-Abfrage kann natürlich auch um beliebige Felder erweitert werden, so dass man noch nach Datum sortieren kann, etc.

    Wenn ihr Fehler, Verbesserungen oder Anmerkungen habt, her damit!

    Daniel, 30. August 2008 um 15:54 Uhr // 0 Kommentare

    technorati bookmark icondigg bookmark icondelicious bookmark iconMister Wong Bookmark Iconyigg bookmark icongoogle bookmark iconTrackback URL für diesen Eintrag
    Verwandte Artikel
    • mod_rewrite und Ampersands in der URL
    • eldanilo.de vs. Unicode - 1:0
    • PHP urlencode vs. JS encodeURIComponent
    • Mehrere IE Versionen in einem Programm
    • Und- und Fragezeichen in der URL
    • Kostenloses Website Monitoring
    • Die Zeit rennt, das Wochenende kommt
  • Kommentare

    • Noch keine Kommentare vorhanden.

    Kommentar schreiben

    * notwendig

    * notwendig (nicht öffentlich)

Daniel Schlessmann / Illustration

Daniel Schlessmann, 24, Mediengestalter und Informatik-Student

bloggt auf dieser Seite über Neues im Netz, sein Studium, Musik und was ihn gerade sonst noch beschäftigt.

mehr herausfinden »

_ Kalender
MoDiMiDoFrSaSo
«August 2008»
    010203
04050607080910
11121314151617
18192021222324
25262728293031
_ TAGS
Schön Neu! Datenschutz Browsersuppe Statistik Resümee JavaScript PHP Wii Studium Schietwedder Wochenende Design Design-Tipps World of Warcraft Movies Musik Sonne Gaming Internet Auf die Ohren Spaß & Unsinn Webdevelopment mod_rewrite Marketing Internet Explorer SQL Code-Schnipsel Wettbewerbe Google Chrome Software SWT Themes Illustration Portfolio Illustrator Studierendenausweis Spam LHC Monitoring SEO Mathematik Theoretische Informatik IBS Party TrackMania Fotografien Welt Systemadministration Patches Comic Tests Video Weihnachten Java Security iPhone Handy Politik Wahlen Trier VPS Linux Ubuntu CSS Tools Tarife Steam E-Mail
eldanilo.de * rss feedeldanilo.de * feed abonnieren