web-dev-qa-db-fra.com

requête MySQL. ORDER BY meta_key

Je me bats déjà assez longtemps et commence à penser que je manque quelque chose de grand. Les publications CPT peuvent avoir ou non des métadonnées (_vip_post [0|1], _thumbnail_id [null|numeric]).

Si je demande pour _thumbnail_id c'est ok et fonctionne:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_thumbnail_id')
ORDER BY 
    m.meta_key DESC,
    wp_posts.post_date DESC

Retourne les messages avec les vignettes en premier, _thumbnail_id = null vient en dernier. assez bon pour l'instant. Travail.

Mais si je demande ma nouvelle _vip_post meta_key, la commande l'ignore totalement. Même motif.

SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_vip_post')
ORDER BY 
    m.meta_key DESC,
    wp_posts.post_date DESC 

Vient de commander par post_date. Ne fonctionne pas.

1
Zlatev

Zlatev

meta_key est le nom du type de publication personnalisé. Il s'agit d'un VARCHAR (255).
meta_value est la valeur de la clé et est un longtext.

Avec votre requête, vous ne commandez pas par valeurs, mais par le nom du champ. La requête fonctionne pour _thumbnail_id car vous utilisez LEFT JOIN et le CPT peut être null.

Vous pourriez voir si vous exécutez cette requête

SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_thumbnail_id')
ORDER BY 
    m.meta_key ASC,
    wp_posts.post_date DESC

Voir le null pour la meta_key

Dans le second cas, le _Vip_post IS du CPT est toujours présent, donc l'ordre dans le nom du champ ne fonctionne pas. Vous devez le commander par meta_value.

Essayez quelque chose comme:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_vip_post')
ORDER BY 
    m.meta_value ASC,
    wp_posts.post_date DESC

Vous pouvez modifier l'ordre en utilisant * m.meta_value DESC *.

4
keatch