2016-09-29 1 views
0

Je suis coincé essayer de créer une requête qui me renvoie les paramètres:requête SQL pour obtenir tous les produits, les catégories et les données méta WooCommerce/wordpress

ID, post_title, post_content, catégorie, ID_category, SKU, nom, stock, prix

A ce moment, j'ai ceci:

SELECT 
p.ID, 
p.post_title, 
`post_content`, 
`post_excerpt`, 
t.name AS product_category, 
t.slug AS product_slug, 
tt.term_taxonomy_id AS tt_term_taxonomia, 
tr.term_taxonomy_id AS tr_term_taxonomia, 
MAX(CASE WHEN pm1.meta_key = '_price' then pm1.meta_value ELSE NULL END) as price, 
MAX(CASE WHEN pm1.meta_key = '_regular_price' then pm1.meta_value ELSE NULL END) as regular_price, 
MAX(CASE WHEN pm1.meta_key = '_sale_price' then pm1.meta_value ELSE NULL END) as sale_price, 
MAX(CASE WHEN pm1.meta_key = '_sku' then pm1.meta_value ELSE NULL END) as sku 

FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON (pm1.post_id = p.ID) 
LEFT JOIN wp_term_relationships AS tr ON (tr.object_id = p.ID) 
LEFT JOIN wp_term_taxonomy AS tt ON (tt.taxonomy = 'product_cat' AND tr.object_id = tt.term_taxonomy_id) 
LEFT JOIN wp_terms AS t ON (t.term_id = tt.term_id) 
WHERE p.post_type in('product', 'product_variation') AND p.post_status = 'publish' AND p.post_content <> '' 
GROUP BY p.ID,p.post_title 

et il me donne correctement les produits et les méta-données, mais il est très difficile pour moi d'obtenir l'ID de catégorie et le nom de la catégorie dans ce requête et je n'ai pas été en mesure de trouver des informations sur le net.

Merci.

+0

Voici le modèle de base de données - où est exactement une colonne appelée ID de catégorie? https://github.com/woocommerce/woocommerce/wiki/Database-Description - Quelles colonnes voulez-vous? – Hogan

+0

Salut @Hogan, merci pour votre réponse. Toutes les informations sur les produits sont stockées dans la base de données Wordpress en tant que messages. https://codex.wordpress.org/Database_Description – superTramp

+0

Eh bien, toutes les informations de terme/taxonomie seraient dans 'wp_terms' et peut-être aussi' wp_term_taxonomy' et 'wp_term_relationships'. Quel est votre raisonnement pour cette requête? Il y a probablement un meilleur moyen qu'une simple requête SQL. WordPress a ses propres fonctions (comme 'get_posts()') et WooCommerce a une [API] (https://woocommerce.github.io/woocommerce-rest-api-docs/) – helgatheviking

Répondre

0

Vous aviez object_id joindre à term_taxonomy_id qui n'avait aucun sens.

Voici comment je pense que cela devrait être - caveat: Je n'ai jamais interrogé une base de données wp et je suivais juste la documentation.

SELECT 
    p.ID, 
    p.post_title, 
    `post_content`, 
    `post_excerpt`, 
    t.name AS product_category, 
    t.term_id AS product_id, 
    t.slug AS product_slug, 
    tt.term_taxonomy_id AS tt_term_taxonomia, 
    tr.term_taxonomy_id AS tr_term_taxonomia, 
    MAX(CASE WHEN pm1.meta_key = '_price' then pm1.meta_value ELSE NULL END) as price, 
    MAX(CASE WHEN pm1.meta_key = '_regular_price' then pm1.meta_value ELSE NULL END) as regular_price, 
    MAX(CASE WHEN pm1.meta_key = '_sale_price' then pm1.meta_value ELSE NULL END) as sale_price, 
    MAX(CASE WHEN pm1.meta_key = '_sku' then pm1.meta_value ELSE NULL END) as sku 
FROM wp_posts p 
LEFT JOIN wp_postmeta pm1 ON pm1.post_id = p.ID 
LEFT JOIN wp_term_relationships AS tr ON tr.object_id = p.ID 
JOIN wp_term_taxonomy AS tt ON tt.taxonomy = 'product_cat' AND tt.term_taxonomy_id = tr.term_taxonomy_id 
JOIN wp_terms AS t ON t.term_id = tt.term_id 
WHERE p.post_type in('product', 'product_variation') AND p.post_status = 'publish' AND p.post_content <> '' 
GROUP BY p.ID,p.post_title 
+0

il montre la même catégorie de produit pour tous products :( – superTramp

+0

ne peut pas vous aider à moins que vous ne montriez un exemple réel de données et de résultats attendus. – Hogan