2013-03-02 11 views
5

Używam WP Data Tables do utworzenia tabeli z SQL DB. W WordPress backend przykładowy kod, aby używać wyglądał następująco:Zapytanie SQL o niestandardowy typ wpisu i wiele pól niestandardowych

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 

Im próbuje uzyskać niestandardowe wartości pól z meta pocztowym. Oto co mam do tej pory ...

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 
AND SELECT custom_field_key_1, custom_field_key_2, custom_field_key_3 
FROM wp_postmeta 
WHERE post_id = post_id 

UPDATE:

Okazało się, że była potrzebna p.ID zamiast post_id i że muszę poszukać meta_key. Coś jak ...

SELECT p.post_title, 
     p.post_date, 
     pm.meta_key = 'custom_field_key' 
FROM wp_posts p 
INNER JOIN wp_postmeta pm 
ON p.ID = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
+0

Uważam, że potrzebujesz "DOŁĄCZ" tutaj. –

Odpowiedz

0

Zakładając, że średnia SQL jest obsługiwany trzeba będzie coś takiego (niesprawdzone):

SELECT w.post_id, w.post_date, m.custom_field_key_1, m.custom_field_key_2, m.custom_field_key_3 
FROM wp_posts w, wp_postmeta m 
WHERE post_type = 'custom_post_type' AND post_status = 'publish' 
AND w.post.id = m.post.id 
4

użyć INNER JOIN:

SELECT p.post_id, 
     p.post_date, 
     pm.custom_field_key_1, 
     pm.custom_field_key_2, 
     pm.custom_field_key_3 
FROM wp_posts p 
    INNER JOIN wp_postmeta pm 
     ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
    AND p.post_status = 'publish' 
+0

Ten rodzaj prac i dołączyłem aktualizację. – user2106176

+0

@ user2106176 - cieszę się, że to pomogło. Patrząc na twoją aktualizację, myślę, że musisz przenieść "pm.meta_key = 'custom_field_key'" do swojej klauzuli WHERE. Nie możesz ustawić wartości pola w instrukcji SELECT. Powodzenia! – sgeddes

+0

Zmieniłem dla mnie wartość p.post_id na p.ID. –

0

Można spróbować .

SELECT p.post_id, p.post_date, 
    pm.custom_field_key_1, pm.custom_field_key_2, pm.custom_field_key_3 
FROM wp_posts p 
JOIN wp_postmeta pm ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
0

Dobrze, mimo że zaktualizowałeś odpowiedź. Wziąłem swój przykład i pracowałem na to uwagę:

SELECT p.ID, 
     p.post_title, 
     pm.meta_value as 'value1', 
     pma.meta_value as 'value2' 

FROM wp_posts p 
     INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID 
     INNER JOIN wp_postmeta AS pma ON pma.post_id = p.ID 

WHERE 
     pma.meta_key = 'custom_field_key_1' AND 
     pm.meta_key = 'custom_field_key_2' AND 

     p.post_type = 'your_post_type' AND 
     p.post_status = 'publish' 

Więc używam alias AS dla wartości umieszczonych w tej samej tabeli, INNER JOIN dla wp_postmeta i post_id i to wszystko.

Referencje: Multiple Inner join same table

W ten sposób otrzymasz tablicę ze stanowisk i wybranych pól niestandardowych:

array(1) { 
    [0]=> object(stdClass)#341 (4) { 
      ["ID"]=> string(1) "1123" 
      ["post_title"]=> string(15) "Your post title" 
      ["custom_field_key_1"]=> string(12) "Your value 1 " 
      ["custom_field_key_2"]=> string(29) "Your value 2" 
} 

Możesz dodać tyle alias i meta_key jak trzeba. Mam nadzieję, że to pomoże!

Powiązane problemy