概要 :私は投稿を返そうとしていません。私は単に、すべての投稿にわたる特定のmeta_valueの単一の最高値が欲しいのです。ただ値そのものです。
詳細 :私はすべての投稿にカスタムmeta_key "price"を追加しました。値は常に整数です(小数点以下の文字も数字以外の文字もなし)。この特定のmeta_keyに関連付けられている最大/最大/最大のmeta_valueを返すクエリを実行しようとしています。
バギーコード
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;
}
バグのある結果 :最初、上記のコードはすべてのmeta_valuesが999未満であればうまくいくと考えていました。meta_valueが999を超えると無視されることがすぐにわかりました。そのため、上記のコードでは、meta_valuesの最大値(meta_value)が1000未満になっています。
コミュニティーへの祈り :明らかに失敗した理由はわかりませんが、WPが値をどのように格納するかに関係していると感じます - おそらくそのデータ型は関係していますか?あるいは、私は$ wpdb-> get_var()を使うべきではありません。任意のガイダンスは大歓迎です。
Meta_valueは、maxが適切な値を返す整数型ではありません。次のようにmysqlのcast
メソッドを使って整数に変換することができます。
SELECT max(cast(meta_value as unsigned)) FROM wp_postmeta WHERE meta_key='price'
私は、より普遍的な機能を持つようにオリジナルの機能とKDMのソリューションを修正しました。こんなふうになります:
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 );
}
このようにして、任意のカスタムmeta_valueの最小値と最大値の両方を取得できます。私はまたあなたが使うプレフィックスに合うようにwp_postmeta
を$wpdb->postmeta
に変更しました。
注:数字を照会したい場合は、$wpdb->prepare()
ステートメントの%s
を%d
に置き換えてください。
私はwp_cacheで動作するようにszajmonソリューションを修正し、取得したSQL構文エラーを修正しました。
wpdb-> prepareは$ end変数を引用符で囲み、エラーになります(少なくとも私の場合)
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;
}