- Statut : non résolu
- Ce sujet contient 9 réponses, 3 participants et a été mis à jour pour la dernière fois par Comme une image, le il y a 15 années et 3 mois.
-
AuteurMessages
-
24 mai 2009 à 14 h 46 min #470455
Bonjour,
Ma configuration WP actuelle
– Version de WordPress : 2.7.1Problème(s) rencontré(s) :
J’essaye de comptabiliser le nombre de posts qui ont deux champs persos spécifiques:
<?php
$test_count = $wpdb->get_var($wpdb->prepare(« SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key = ‘test’ AND meta_key = ‘blablabla' », $meta_key));
echo » . $test_count . »;
?>ça n’a pas l’air bon, j’ai un petit 0 en résultat
24 mai 2009 à 18 h 00 min #673626si tu regardes la query il me semble difficile que meta_key soit égal en même temps à test et à blabla !!!
BOn c’est un peu trappu, mais ça marche !
SELECT COUNT(*)
FROM $wpdb->posts a
WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’)
AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test’)24 mai 2009 à 18 h 16 min #673627ça n’a pas l’air
j’ai essayé:
get_var($wpdb->prepare(« SELECT COUNT(*) FROM $wpdb->posts a WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’) AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test' », $meta_key));
echo » . $test_count . »;
?>mais rien s’affiche (et il n’y a pas d’erreur) 😕
24 mai 2009 à 21 h 27 min #673628get_var(« SELECT COUNT(*) FROM $wpdb->posts a WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’) AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test' »);
echo » . $test_count . »;
?>24 mai 2009 à 22 h 20 min #673629pareil 😕
24 mai 2009 à 22 h 36 min #673630j’ai fait le test suivant : j’ai créé un post avec 2 champs perso avec comme CLE : blablabla et test
et lorsque j’ai executé la requete, j’ai obtenu : 1
24 mai 2009 à 23 h 09 min #673631oups je crois que j’ai mal expliqué , en fait je n’ai pas de posts qui ont les deux champs en même temps!
j’ai un groupe de posts qui a donc « blablabla », et un autre groupe qui a « test », et donc je veux comptabiliser ces deux groupes 🙂
++
24 mai 2009 à 23 h 12 min #673632SELECT COUNT(*)
FROM $wpdb->posts a
WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key in ( ‘blablabla’, ‘test’))pour comptabiliser les posts qui ont ou blablabla ou test ou les deux
24 mai 2009 à 23 h 17 min #673633merci c’est bon :p
25 mai 2009 à 21 h 25 min #673634Je propose une méthode alternative :
SELECT COUNT(DISTINCT(a.ID))
FROM $wpdb->posts a
JOIN $wpdb->postmeta p ON p.post_id = a.ID
WHERE p.meta_key in ( ‘blablabla’, ‘test’) ;Ce serait intéressant de bencher les deux requêtes, j’ai fait un « EXPLAIN » mais je ne suis pas assez bon pour comprendre le résultat ! J’aurais tendance à penser qu’une jointure est plus efficace qu’une requête imbriquée, mais si un expert SQL pourrait me foutre la honte en mettant à plat ma belle théorie, j’en serais ravi et ça me ferait progresser !!!
(Une méthode de base, ce serait de noter le temps de réponse de chacune des requêtes, mais avec les effets de cache, cette méthode pourrait être hasardeuse.)
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.