✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

WordPress-Abfragen mit IN-Klauseln (Who Knew)?

21

Vor etwas mehr als einem Jahr habe ich einen Beitrag darüber geschrieben, wie man WP_Meta_Query verwendet, wenn man eine Reihe von Schlüsseln hat, die man verwenden möchte, um Informationen aus der Datenbank abzurufen.

Was ist jedoch, wenn Sie eine Reihe verschiedener Schlüssel haben, die dazu führen würden, dass ein wirklich langes Array für die Klasse WP_Meta_Query erstellt wird? Was wäre zum Beispiel, wenn Sie eine Datensammlung durchlaufen müssten, bevor Sie die Abfrage überhaupt einrichten?

Auf einer gewissen Ebene könnte es sich so anfühlen, als wäre es das Natürliche, Folgendes zu tun:

  1. durch die Sammlung von Schlüsseln iterieren,
  2. die Ergebnisse dynamisch aufbauen,
  3. Kombinieren Sie sie zu einem einzigen Ergebnissatz,
  4. dann arbeite mit dem, was dir gegeben wird.

Aber klingt das nicht etwas umständlich (geschweige denn langsam)?

Wenn es um die Verwendung der WordPress-API geht, tue ich, was ich kann, um mich daran zu halten, bevor ich z um die WordPress-API zum Laufen zu bringen.

Bevor ich auf die Gründe eingehe, warum ich die Dinge getan habe, die ich getan habe, möchte ich das Problem und den Ansatz erläutern. Dies wird wahrscheinlich jemanden davor bewahren, vorzeitig in die Kommentare zu springen.

Dieser Screenshot hat nichts mit der Abfrage zu tun. Nur ein Schuss der IDE zum Spaß.

Also hier los:

  • Ich habe ein Standard-Array von Werten, die schließlich verwendet werden, um Metadaten zu nehmen und daraus einen benutzerdefinierten Beitragstyp zu erstellen (weil sie aus einer Quelle eines Drittanbieters importiert wurden).
  • Ich bin ein großer Befürworter der Parametrisierung von Abfragen (und damit der Verwendung von Prepare ), um sicherzustellen, dass die Daten korrekt gegen die Datenbank abgefragt werden. Leider war dies beim Versuch, diese Abfrage auszuführen, nicht der Fall. Warum, erkläre ich später in diesem Beitrag.
  • Nehmen Sie also das Array und konvertieren Sie es in einen String, das ist hilfreich, aber es löst immer noch nicht das Problem, warum die Standard- Vorbereitungsfunktion nicht funktioniert hat.

Nachdem dies gesagt wurde, werde ich ein paar Dinge erklären:

  1. warum ich mich für die Verwendung eines Arrays zum Speichern von Metadatenwerten entschieden habe,
  2. warum ich implode verwendet habe , um sie in einen String zu konvertieren,
  3. warum verwende ich nicht die Vorbereitung, um die Abfrage zu bearbeiten.

Über Metadatenwerte

Der Grund dafür, Metadaten in einem Array als Eigenschaft der Klasse zu speichern, liegt darin, dass sich dieses Array im Laufe der Zeit ändern kann.

Das heißt, wir müssen möglicherweise zusätzliche Daten von Drittanbietern importieren, Daten von Drittanbietern entfernen oder einige Änderungen an dem vornehmen, was vorhanden ist.

Wenn diese Daten an einem einzigen Ort aufbewahrt werden, ist die Verwaltung für zukünftige Versionen des Codes viel einfacher.

Das Array implodieren

Immer wenn Sie eine Abfrage für die Datenbank ausführen und mit einem Array von Daten arbeiten müssen, können Sie WP_Meta_Query verwenden und jeden Schlüssel als Teil des Argumentarrays verwenden.

Aber wenn Sie einen relativ großen Datensatz haben, müssen Sie ihn zuerst alle durchlaufen, dann müssen Sie die Abfrage erstellen, dann müssen Sie sie verarbeiten.

Und nachdem Sie all das getan haben, bin ich nicht davon überzeugt, dass der geschriebene Code nicht zu Lasten der Leistung gegangen ist. Aus diesem Grund entscheide ich mich manchmal für die Verwendung von wpdb.

Vorbereiten wird nicht verwendet

Wenn ich jetzt direkt mit der Datenbank interagiere, versuche ich Folgendes sicherzustellen:

  1. Ich habe einen guten Grund dafür,
  2. Ich verwende parametrisierte Abfragen.

Aber ich arbeite seit einiger Zeit mit diesem speziellen Datensatz und versuche, jede mir bekannte Permutation der WordPress-Entwicklung zu nutzen (einschließlich der Gespräche mit mehreren Kollegen darüber), um zu versuchen, diese Arbeit so gut wie möglich zu gestalten.

Es geschah jedoch nicht. Und da bin ich im Codex auf folgende Seite gestoßen :

In 99 % der Fälle können Sie stattdessen $wpdb->prepare() verwenden, und das ist die empfohlene Methode. Diese Funktion wird nur in den seltenen Fällen verwendet, in denen Sie $wpdb->prepare() nicht einfach verwenden können. Ein Beispiel ist die Vorbereitung eines Arrays zur Verwendung in einer IN-Klausel.

Und genau das habe ich versucht: Ich wollte die Post-Meta-Tabelle durchsuchen, in der die Meta-Schlüsselwerte in einem Array enthalten waren.

Also hier ist, wie ich das alles ausgearbeitet habe.

Zuerst habe ich ein Array erstellt, um die verschiedenen Metaschlüssel zu speichern, von denen ich weiß, dass ich sie irgendwann zuordnen muss (obwohl der Wert der Schlüssel für den Zweck dieses Beitrags keine Rolle spielt):

Dann habe ich sie in einen MySQL-fähigen String konvertiert. Zugegeben, dies ist keine Benutzereingabe und wird in einer IN – Klausel verwendet, sodass sie nicht in einer Anweisung zur Vorbereitung verwendet werden kann:

Schließlich habe ich die Abfrage erstellt und die Ergebnisse abgerufen:

Und so habe ich schließlich mit den Arrays und der Klasseneigenschaft gearbeitet und meine Abfrage eingerichtet.

Ist dies der beste Weg, um mit WordPress-Abfragen mit IN-Klauseln zu arbeiten? Ich bin mir nicht sicher, aber angesichts meiner Erfahrung, was ich gelesen habe und wie es funktioniert, bin ich mit dem Endergebnis zufrieden.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen