2012-10-25 13 views
7

Potrzebuję wyodrębnić wszystkie posty z mojego WordPress DB wraz z powiązanych kategorii i nie wiem, jak napisać to zapytanie. Zrobiłem już kilka ukłuć bez żadnej radości i doceniłbym pomoc?Zapytanie SQL, aby wyodrębnić wszystkie posty WordPress z kategoriami

EDIT: Oto, co już próbowałem:

SELECT post_title, wpr.object_id, wp_terms.name 
FROM wp_terms 
INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id 
INNER JOIN wp_term_relationships wpr ON wpr.term_taxonomy_id = 
wp_term_taxonomy.term_taxonomy_id 
INNER JOIN wp_posts ON ID = wpr.object_id 
WHERE taxonomy = 'category' 
AND post_type = 'post' 
ORDER by post_title 

To wydaje się działać, ale zwraca 1,553 gdzie wiem, że tylko 1343 w moim DB.

EDIT: Zrobiliśmy to samo w innym zapytaniu SQL jakiś czas temu i okazało się, że została ciągnąc w rewizjach i innymi rodzajami pocztowych, ale myślałem, że to zostało rozwiązane za pomocą post_type = „post”

EDYCJA: Po sprawdzeniu liczby kategorii w DB, wymyślam całkowitą liczbę 216, 6 od numeru, jeśli odejmujesz 1553 - 1343 = 216. Myślę, że ta łączna liczba 1553 nadchodzi z tabeli wp_terms, która musi zostać wykluczona i powinny być wyświetlane tylko te, które są aktywne z opublikowanymi wpisami?

EDIT: Inną możliwością jest to, że każdy post może mieć wiele kategorii, stąd powód do posiadania większej liczby stanowisk (1553). Jak mogę podzielić poszczególne posty na wiele kategorii?

Wielkie dzięki!

+0

[co próbowaliście] (http://whathaveyoutried.com) do tej pory? czy możesz opublikować strukturę tabel, których potrzebujesz do zapytania? – Aprillion

+0

Co jest nie tak z tym, co napisałeś? Czy ma błąd, czy nie zwraca żądanych wyników? –

+0

Dodałem kilka EDYTÓW, aby pomóc w moich odkryciach, jeśli ktoś może ponownie go obejrzeć? – SixfootJames

Odpowiedz

19

To jest ostatnia odpowiedź, która sprawdziła się u mnie.

SELECT DISTINCT 
post_title 
, post_content 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Asking Price (US\$)' AND wp_postmeta.post_id = wp_posts.ID) AS "Asking Price (US\$)" 
,(SELECT group_concat(wp_terms.name separator ', ') 
    FROM wp_terms 
    INNER JOIN wp_term_taxonomy on wp_terms.term_id = wp_term_taxonomy.term_id 
    INNER JOIN wp_term_relationships wpr on wpr.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
    WHERE taxonomy= 'category' and wp_posts.ID = wpr.object_id 
) AS "Categories" 
,(SELECT group_concat(wp_terms.name separator ', ') 
    FROM wp_terms 
    INNER JOIN wp_term_taxonomy on wp_terms.term_id = wp_term_taxonomy.term_id 
    INNER JOIN wp_term_relationships wpr on wpr.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
    WHERE taxonomy= 'post_tag' and wp_posts.ID = wpr.object_id 
) AS "Tags" 
FROM wp_posts 
WHERE post_type = 'post' 
ORDER BY 
post_title 
, post_content 
+2

Dzięki za udostępnienie kodu SQL, aby pobrać znaczniki i kategorie z bazy danych - bardzo pomogło :) –

+0

Cieszę się, że to zadziałało. ;) – SixfootJames

+5

'AND post_status = 'publish'' – Xeoncross