Como obter a linha da tabela db que tem o maior valor no valor meta?

Por exemplo, eu tenho um meta-campo chamado car_number :

Então, normalmente eu tentaria algo assim para obter esse valor:

 $car_value = get_post_meta($post->ID, 'car_number'); 

Mas o porblem é que eu preciso obter a linha apenas onde o car_number do car_number é mais alto, por exemplo, 45. então eu preciso de alguma forma obter o valor mais alto e fazer algo como isto:

 $post_ID = .. // here I need to get the ID of the post that has the biggest value in the fild car_value $car_value = get_post_meta($post_ID, 'car_number'); 

Como posso obter o post_ID da postagem que possui o maior valor (número) no meta-campo car_value?

Solutions Collecting From Web of "Como obter a linha da tabela db que tem o maior valor no valor meta?"

O WP_Query possui um recurso chamado meta_query . Usá-lo permite consultar por valor ou valor numérico :

 $car = new WP_Query( array( 'post_type' => array( 'cars' ), 'meta_key' => 'car_number', 'orderby' => 'meta_value_num', 'posts_per_page' => 1, 'order' => 'DESC', 'cache_results' => true, ) ); $carNr = get_post_meta( $car->ID, 'car_number', true ); // Inspect result var_dump( $carNr ); 

Agora, temos o tipo de mensagem correto, a meta-chave apropriada e definida que queremos ordenar pelo seu valor, só precisamos limitar o resultado a uma única publicação e ter uma ordem decrescente. Quando obtivemos o post, podemos facilmente pegar o valor meta.

Outra opção seria fazer uma consulta simples:

 global $wpdb; $wpdb->get_var( "SELECT {$wpdb->postmeta}.meta_value FROM {$wpdb->postmeta} WHERE 1=1 AND {$wpdb->postmeta}.meta_key = 'car_number' ORDER BY ABS( {$wpdb->postmeta}.meta_value ) DESC LIMIT 0,1" ); 

Dependendo de como você salvou seus valores – muitas vezes, os plugins salvam números / dígitos / números inteiros como strings – talvez seja necessário converter seu valor durante a consulta. Nesse caso, substitua a ordem por parte com

 CAST( {$wpdb->postmeta}.meta_value as SIGNED INTEGER ) 

Nota: Se você não possui números inteiros negativos, você pode ir com UNSIGNED

ou

 CONVERT( {$wpdb->postmeta}.meta_value, SIGNED INTEGER ) 

Experimente este método

 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 ); } 

daqui . Para mim, funcionou bem.