Intereting Posts
Пользовательская страница с переменными в url. Хороший URL-адрес с add_rewrite_rule Как получить идентификатор области виджета (идентификатор боковой панели) в widget_update_callback ()? Добавление полей, связанных с плагинами, с помощью wp_insert_post ()? Каков предпочтительный способ написания плагинов с поддержкой AJAX? Штрих-код вложенности приводит к тому, что внутренний короткий код помещается после внешнего короткого кода Добавление php непосредственно в короткий код виджетов Как получить изображения галереи? Проблема добавления класса has-children в wp_nav_menu Остановите WordPress от использования HTTPS и просто используйте HTTP Действие «После загрузки файла» Установка WordPress не завершается на сервере WAMP Как изменить wp_query перед его запуском / выполнением? Как расширить разделы и настройки родительских тем в Дереве опций Действие wp_logout не работает css не работает wordpress на сервере godaddy

SELECT max (meta_value) FROM wp_postmeta WHERE meta_key = 'price' … перестает работать, когда значение превышает 999

Обзор . Я не пытаюсь вернуть сообщение. Я просто хочу единственное самое высокое значение для определенного meta_value во всех сообщениях … просто само значение.

Подробности : я добавил обычную 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; } 

Результаты багги : Сначала я думал, что код выше работал, потому что он делает, если все мета-значения меньше 999. Вскоре я обнаружил, что если meta_value больше 999, то оно игнорируется. Так что действительно код выше дает мне max (meta_value) для meta_values ​​меньше 1000.

Обращение к сообществу : Очевидно, я не знаю, почему это терпит неудачу, но у меня такое чувство, что это имеет какое-то отношение к тому, как WP сохраняет ценность – возможно, связанный с ней тип данных? Или, может быть, я не должен использовать $ wpdb-> get_var (). Любые рекомендации будут высоко оценены.

Solutions Collecting From Web of "SELECT max (meta_value) FROM wp_postmeta WHERE meta_key = 'price' … перестает работать, когда значение превышает 999"

Значение 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 чтобы соответствовать любому префиксу, который вы используете.

Примечание. Если вы хотите запросить цифру, замените %s в $wpdb->prepare() %d .

Я изменил решение szajmon для работы с wp_cache и исправил ошибку синтаксиса 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; }