Vue d'ensemble : Je n'essaie pas de retourner un message. Je veux simplement la valeur unique la plus élevée pour une meta_value particulière parmi tous les articles ... juste la valeur elle-même.
Détails : J'ai ajouté un "prix" meta_key personnalisé à tous mes messages. La valeur est toujours un entier (pas de décimales ni de caractères non numériques). J'essaie de faire une requête qui retourne la meta_value la plus haute/la plus grande/la plus grande associée à cette meta_key particulière.
Code Buggy
function max_meta_value(){
global $wpdb;
$query = "SELECT max(meta_value) FROM wp_postmeta WHERE meta_key='price'";
$the_max = $wpdb->get_var($query);
return $the_max;
}
Buggy Results : Au début, je pensais que le code ci-dessus fonctionnait, car si toutes les valeurs méta-valeurs sont inférieures à 999, j'ai vite découvert que, si la valeur méta est supérieure à 999, elle est ignorée. Le code ci-dessus me donne donc le maximum (meta_value) pour les meta_values inférieures à 1000.
Plea to Community : Évidemment, je ne sais pas pourquoi cela échoue, mais j’ai le sentiment que cela a quelque chose à voir avec la façon dont WP stocke la valeur - peut-être son type de données? Ou peut-être que je ne devrais pas utiliser $ wpdb-> get_var (). Toute orientation sera grandement appréciée.
Meta_value n'est pas de type entier pour que max renvoie les valeurs correctes. Vous pouvez utiliser la méthode mysql cast
pour convertir en entiers comme suit:
SELECT max(cast(meta_value as unsigned)) FROM wp_postmeta WHERE meta_key='price'
J'ai modifié la fonction d'origine et la solution de KDM afin de lui donner une fonction plus universelle. Ça va comme ça:
function end_meta_value( $end = "max", $meta )
{
global $wpdb;
$query = $wpdb->prepare(
"SELECT %s( cast( meta_value as UNSIGNED ) ) FROM {$wpdb->postmeta} WHERE meta_key='%s'",
$end,
$meta
);
return $wpdb->get_var( $query );
}
De cette façon, vous pouvez obtenir les valeurs minimales et maximales de toute méta_value personnalisée. J'ai également changé wp_postmeta
en $wpdb->postmeta
pour s'adapter à tout préfixe que vous utilisez.
Remarque: Si vous souhaitez interroger un chiffre, remplacez %s
dans l'instruction $wpdb->prepare()
par %d
.
J'ai modifié la solution szajmon pour fonctionner avec wp_cache et corriger l'erreur de syntaxe SQL que je reçois.
wpdb-> prepare encapsule la variable $ end avec des guillemets et crée une erreur (du moins dans mon cas)
function get_min_max_meta_value( $type = 'max', $key ){
global $wpdb;
$cash_key = md5($key . $type);
$results = wp_cache_get($key);
if($results === false){
$sql = "SELECT " . $type . "( cast( meta_value as UNSIGNED ) ) FROM {$wpdb->postmeta} WHERE meta_key='%s'";
$query = $wpdb->prepare( $sql, $key);
return $wpdb->get_var( $query );
}
return $results;
}