Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now
Sign InSign Up

PHP-J

PHP-J

PHP-J Navigation

  • Главная
  • Контакты
Поиск
Задать вопрос

Mobile menu

Close
Задать вопрос
  • Главная
  • Add group
  • User Profile
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Buy Points
Home/ Questions/Q 82845
Next
Answered
kevin
  • 0
kevinУчитель
Asked: 20 марта, 20222022-03-20T17:37:54+03:00 2022-03-20T17:37:54+03:00In: Wordpress (Вопросы и ответы)

Meta_query: использование BETWEEN с числами с плавающей запятой и/или приведение к DECIMAL

  • 0

Каждое сообщение имеет значение широты/долготы, прикрепленное к нему через postmeta. Я пытаюсь захватить все сообщения в пределах ограничивающего значения широты/долготы. Вот get_posts запрос:

$posts = get_posts(array(
    'posts_per_page' => 100,
    'post_type' => 'place',
    'post_status' => 'publish',
    'meta_query' => array(
        array(
            'key' => 'places_lat',
            'value' => array($lat_min, $lat_max),
            'compare' => 'BETWEEN',
            //'type' => 'DECIMAL',
        ),
        array(
            'key' => 'places_lng',
            'value' => array($lng_min, $lng_max),
            'compare' => 'BETWEEN',
            //'type' => 'DECIMAL',
        ),
    ),
));

Поскольку значения postmeta хранятся в виде строк, я решил, что должен приводить к DECIMAL, но, похоже, это просто обрезает десятичное значение из строки из-за отсутствия DECIMAL аргументов/параметров точности.

Я заметил, что запрос обрабатывает числа с плавающей запятой в value массиве как строки, что также может быть еще одной точкой отказа. Выполнение скомпилированного запроса без кавычек вокруг каждого плавающего значения работает должным образом.

Я буду использовать get_permalink() в каждом посте. Я могу запустить собственный запрос за пределами get_posts (через $wpdb->get_results() ), чтобы правильно захватить сообщения в ограничивающей рамке, а затем перебрать сообщения и get_permalink, но в конечном итоге это приведет к запуску дополнительного запроса к базе данных для каждого сообщения для создания постоянной ссылки — не идеальное решение!

Есть идеи?

get-postspost-metawp-query
  • 7 7 ответов
  • 21 просмотров
  • 0 Followers
  • 0
Ответить
Share
  • Facebook

    7 ответов

    • Лучшие оценки
    • Старые
    • Недавние
    • Случайные
    1. janfabry Гуру
      2022-03-20T17:38:38+03:00Добавлен ответ 20 марта, 2022 в 5:38 пп

      Побочное примечание: я бы не стал делать запрос местоположения для postmeta таблицы, таким образом будет сложно извлечь выгоду из индексов. Однажды я написал пример, который копирует геоданные публикации в отдельную таблицу с эффективным индексом и выполняет геозапросы к этой таблице.

      • 0
      • Reply
      • janfabry Гуру
        2022-03-20T17:40:33+03:00Replied to ответ 20 марта, 2022 в 5:40 пп

        Вы даже можете использовать более конкретный фильтр: get_meta_sql , так как часть запроса таксономии создается в _get_meta_sql() . Это также не зависит от suppress_filters, поэтому вам не нужно его отключать.

        • 0
        • Reply
      • kevin Учитель
        2022-03-20T17:41:25+03:00Replied to ответ 20 марта, 2022 в 5:41 пп

        Спасибо, Рарст, и еще раз спасибо, Ян! Я думаю, что лучшим вариантом в этом случае будет перемещение значений широты/долготы в отдельную таблицу для лучшей индексации.

        • 0
        • Reply
      • amit Учитель
        2022-03-20T17:42:06+03:00Replied to ответ 20 марта, 2022 в 5:42 пп

        попробовал оба решения, и похоже, что он сравнивает их как строки с одинарными кавычками (wp 3.1.1), есть идеи по этому поводу? хотя попытка сырого sql сработала.

        • 0
        • Reply
      • rarst Гуру
        2022-03-20T17:43:29+03:00Replied to ответ 20 марта, 2022 в 5:43 пп

        @Amit Ничего я не могу здесь догадаться… Обычно это долгая отладочная путаница с кодом, связанным с запросами.

        • 0
        • Reply
    2. Лучший ответ
      rarst Гуру
      2022-03-20T17:39:21+03:00Добавлен ответ 20 марта, 2022 в 5:39 пп

      Вы можете отфильтровать сгенерированный SQL и добавить необходимые параметры точности.

      Включите фильтры для get_posts(), добавив в запрос следующее:

      'suppress_filters' => false,
      

      А также:

      add_filter('posts_where','cast_decimal_precision');
      
      function cast_decimal_precision( $where ) {
      
          return str_replace('DECIMAL','DECIMAL(10,3)',$where);
      }
      

      Обновлять

      По предложению Яна:

      add_filter('get_meta_sql','cast_decimal_precision');
      
      function cast_decimal_precision( $array ) {
      
          $array['where'] = str_replace('DECIMAL','DECIMAL(10,3)',$array['where']);
      
          return $array;
      }
      
      • 0
      • Reply
    3. switzerbaden Новичок
      2022-03-20T17:44:20+03:00Добавлен ответ 20 марта, 2022 в 5:44 пп

      Начиная с версии 3.8 ( см. track ) точность может быть добавлена ​​к типу приведения следующим образом:

      $posts = get_posts(array(
          'posts_per_page' => 100,
          'post_type' => 'place',
          'post_status' => 'publish',
          'meta_query' => array(
              array(
                  'key' => 'places_lat',
                  'value' => array($lat_min, $lat_max),
                  'compare' => 'BETWEEN',
                  'type' => 'DECIMAL(10,3)',
              ),
              array(
                  'key' => 'places_lng',
                  'value' => array($lng_min, $lng_max),
                  'compare' => 'BETWEEN',
                  'type' => 'DECIMAL(10,3)',
              ),
          ),
      ));
      
      • 0
      • Reply

    Оставить ответ
    Отменить ответ

    You must login to add an answer.

    Forgot Password?

    Need An Account, Sign Up Here

    Sidebar

    Ask A Question

    Stats

    • Questions : 7k
    • Answers : 38k
    • Best Answers : 4k
    • Users : 5k
    • Popular
    • Answers
    • netconstructorcom

      Лучшая подборка кода для вашего файла functions.php [закрыто]

      • 97 Answers
    • MikeSchinkel

      Объективные рекомендации по разработке плагинов? [закрыто]

      • 83 Answers
    • EAMann

      Как легко перенести установку WordPress из стадии разработки в рабочую ...

      • 60 Answers
    • EarleSemia
      EarleSemia added an answer [url=http://images.google.com.uy/url?q=https://big2dickporn.club/2022/06/21/ШЈШ±ШЁШ№Ш©-Ш±ЩЃШ§Щ‚-ЩЉЩ…Ш§Ш±Ші-Ш§Щ„Ш¬Щ†Ші-Щ…Ш№-ШІЩ€Ш¬ШЄЩЉ.html]ШЈШ±ШЁШ№Ш©-Ш±ЩЃШ§Щ‚-ЩЉЩ…Ш§Ш±Ші-Ш§Щ„Ш¬Щ†Ші-Щ…Ш№-ШІЩ€Ш¬ШЄЩЉ[/url] 6 июля, 2022 at 9:18 дп
    • Karenfreva
      Karenfreva added an answer [url=https://sildenafilviashop.com/]viagra over the counter[/url] cialis vs viagra [url=https://tblsviagra.com/]cheap viagra online[/url]… 27 июня, 2022 at 11:19 дп
    • Karenfreva
      Karenfreva added an answer [url=https://casinoboba.com/]lucky creek[/url] uptown ace casino [url=https://casinowingames.com/]sloto cash casino[/url] andromeda [url=https://realmonetcasino.com/]ignition[/url]… 25 июня, 2022 at 12:21 пп

    Похожие вопросы

    • nmystic

      Как назначить файл по умолчанию в «Внешний вид > Редактор»?

      • 0 Answers
    • billeisenhauer

      Как показать полную публикацию на главной странице

      • 0 Answers
    • atticus

      Создание пользовательских запросов AJAX

      • 1 Answer

    Лучшие участники

    rarst

    rarst

    • 0 Questions
    • 5k Points
    Гуру
    bainternet

    bainternet

    • 0 Questions
    • 5k Points
    Гуру
    janfabry

    janfabry

    • 0 Questions
    • 3k Points
    Гуру

    Trending Tags

    categories comments custom-field custom-post-types custom-taxonomy customization functions images menus multisite pages permalinks php plugin-development plugin-recommendation plugins posts theme-development themes widgets wp-admin

    Footer

    © 2022

    Вставить/изменить ссылку

    Введите адрес назначения (URL)

    Или сделайте ссылку на существующий материал

      Поисковый запрос не задан. Показаны недавние элементы. Воспользуйтесь поиском или клавишами вверх/вниз, чтобы выбрать элемент.