Verzwickte MySQL-Abfrage

  • Hallo,

    ich setze das Plugin [COLOR=Black]Popularity Contest[/COLOR] ein, mit dem man die beliebtesten Beiträge anzeigen lassen kann. Nun ist es so, das ich gern eine Kategorie ausschliessen würde und dazu die Plugin Datei anpassen muss, da keine Parameter bei den Pluginfunktionen dafür vorgesehen sind.

    Mein Problem ist, das ich nicht so firm in JOIN-Abfragen bin. Die momentane Abfrage sieht folgendermassen aus:

    Da werden ja jetzt schon 2 Tabellen abgefragt und verglichen. Wie kann ich da jetzt noch einen JOIN (und vor allem welchen) hinzufügen um beispielsweise Beiträge der Kategorie 1 auszuschliessen? Das wären ja dann insgesamt 3 Tabellen, die abgefragt werden müssen.

    Kann mir dabei jemand behilflich sein?
    Liebe Grüße
    Swabian

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Beim JOIN benötigst du immer ein Schlüsselfeld, auf das gejoint wird - zumeist die (Post-)ID. Prinzipiell kannst du dann beliebige viele Tabellen per JOIN verknüpfen (wobei ein JOIN jeweils eine neue Tabelle liefert, die du dann mit einem weiteren JOIN mit der nächsten Tabelle verknüpfst).

    Ohne ein DB-Schema kann man aber nix genaueres sagen. Ich vermute mal du benötigst die wp_term_relationships um an die Kategorie-ID zu kommen, um diese dann in der WHERE-Clause auszuschließen.

    Ein vielleicht hilfreicher Link:
    Database Description « WordPress Codex

  • Danke für die Info.
    Bis zur Tabelle wp_term_relationships bin ich schon vorgedrungen. Allerdings ist es nicht so einfach die Kategorie auszuschliessen, da in der Tabelle auch mehrere Einträge zur postID existieren können. Zum Beispiel man hat eine Kategorie und 3 Tags bei einem Beitrag vergeben, dann hat man dort 4 Einträge. Wirklich verzwickt.

    Wenn man den Eintrag mit der Kategorie ausschliesst, ist der beim nächsten Eintrag (Tag) wieder TRUE. Damit wird der Beitrag dann trotzdem angezeigt.

  • Wäre ja möglich, dass dem Post noch ein oder mehrere Tags zugeordnet sind. Im Worst-case ist der Post sogar in mehrere Kategorien einsortiert. Beim 1. Fall könnte es helfen, noch zu prüfen, ob der Term ein Kategorie-Term ist. Beim 2. Fall wirds deutlich komplizierter.

  • Ich seh schon, ich werde diesen Lösungsansatz streichen können. Eigentlich will ich ja nur die beliebtesten Beiträge in der Sidebar anzeigen lassen und habe dazu dieses oben genannte Plugin gewählt.

    Gibt es denn eine elegantere Methode dieses Vorhaben umzusetzen und dabei eine oder mehrere Kategorien auszuschliessen?

  • Du kannst aber in der WHERE-Klausel etwa folgendes hinzufügen:

    Code
    WHERE . %DeinTeil%
      AND NOT EXISTS (SELECT * FROM wp_term_relationships WHERE term_taxonomy_id = %KATEGORIE-ID% AND object_id = pop.post_id)

    Ist jetzt nicht getestet, aber schonmal ein Ansatz ;)

  • chrisostomos

    Was soll ich sagen. Es funktioniert so wie es soll.
    Vielen, vielen Dank. Das war mir eine grosse Hilfe.

    Hier nochmal die komplette, funktionierende Abfrage. Falls es mal jemand braucht.

    Swabian

    Einmal editiert, zuletzt von Swabian (29. Januar 2008 um 01:01)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!