2016-06-13 9 views
0

Ich stehe also vor einer Herausforderung für ein WordPress-Projekt, an dem ich arbeite, und ich hoffe, dass mir jemand einen Tipp geben kann, wie ich das am besten erreichen kann. So verwende ich erweiterte benutzerdefinierte Felder für einen benutzerdefinierten Beitragstyp, und ich habe ungefähr 10 verschiedene Felder gemacht. Ich muss eine Suche erstellen, die mit dem Wert in den erweiterten benutzerdefinierten Feldern übereinstimmen und die Post-ID zurückgeben muss.Wie würde ich diese Abfrage erstellen, wenn es möglich ist?

Die benutzerdefinierten Felder speichert sie die Daten in der wp_postmeta Tabelle und sieht ungefähr so ​​aus:

+------------------------------------------+ 
|meta_id | post_id | meta_key | meta_value | 
|------------------------------------------| 
| 1  | 24  | state | CA   | 
| 2  | 24  | city  | Yuba City | 
| 3  | 24  | type  | Full time | 
+------------------------------------------+ 

(mit viel mehr, aber es kurz zu halten).

Wenn also meine Suchfelder "State", "City" und "Job Type" sind und alle drei ausgefüllt sind, muss ich die post_id zurückgeben, wenn alle drei Meta-Werte mit denen übereinstimmen, nach denen gesucht wurde .

Ich musste noch nie so etwas machen, wo sie in mehreren Reihen sind, also bin ich mir nicht ganz sicher, wie ich das machen würde.

Antwort

1

Eine Methode verwendet Aggregation. Eine Methode verwendet join. Zum Beispiel:

select ps.post_id 
from wp_postmeta ps join 
    wp_postmeta pc 
    on ps.post_id = pc.post_id and 
     ps.meta_kay = 'state' and ps.meta_value = 'CA' and 
     pc.meta_key = 'city' and pc.meta_value = 'Yuba City' join 
    wp_postmeta pt 
    on pt.post_id = ps.post_id and 
     pt.meta_key = 'type' and pt.meta_value = 'Full time'; 
+0

und pC !! .meta_value = 'Yuba City' beitreten – splash58

+0

Vielen Dank! Ich wusste nicht, dass du Joins innerhalb derselben Tabelle machen kannst, das ist großartig. Also habe ich genommen, was Sie mir hier gezeigt haben, und ich habe ein paar Nachforschungen über Joins in derselben Tabelle angestellt und habe ein viel besseres Verständnis. Nun, was möchte ich fragen, kannst du dich so vielen an einem Tisch anschließen? Grund, den ich frage, ist, dass ich es zur Arbeit bringen kann, um zu erklären. Aber wenn ich auch den Join für die Stadt hinzufüge, hört er auf, etwas zurückzugeben. – lpangm03

+0

@ lpangm03. . . Nun, wollen Sie einen Index auf 'wp_postmeta (post_id, meta_key, meta_value)'. –

Verwandte Themen