Intereting Posts
При перемещении установки WordPress на новый сервер, почему я должен обновлять каждое сообщение до того, как будет показано содержание? Несколько сообщений категории на одной странице Ошибка допустимого размера памяти в WordPress отображение домена сетевого сайта по-прежнему применяется после удаления Добавить список автозапуска в конкретный тег html? плагин wordpress для поиска полей базы данных Страница списка авторов: как исключить должности из определенной категории Можно временно отключить автозапуск? Плагин замены имени / слова Получить таксономии детей в цикле Не разумно ли использовать только мета-возможности для определенных базовых типов сообщений? Как мы ограничиваем пользователя видеть поле в сообщении без регистрации, Плагин для загрузки прикрепленных файлов мультимедиа? Шаблон подстраницы Получить url-friendly версию the_title?

Группировка связанных данных postmeta с помощью SQL-запроса

Я использую чужой плагин WP, который хранит множество связанных данных в wp_postmeta используя «искусственный ключ». Поэтому мы эффективно wp_postmeta для создания вложенной реляционной базы данных. Таким образом, один ряд будет иметь

  meta_id = 999 post_id = 130 meta_key = 'event_id' meta_value = '19' 

Затем 4 другие фактические строки wp_postmeta, которые совместно используют этот post_id, содержат остальную информацию для этой виртуальной «строки» данных. Например

  meta_id = 989 post_id = 130 meta_key = 'Name' meta_value = 'Fred' 

И у нас будет много «виртуальных строк» ​​(сотен), в которых все будут иметь значение event_id из 19 (и, конечно, много других с разными event_id .

Я пробовал много SQL-запросов, но я в тупике. Как я могу получить таблицу, которая сгруппировала информацию для общего события event_id? Он не должен иметь все данные, всего одну часть, например поле «Имя». Я попробовал такой подзапрос:

 SELECT meta_value from wp_postmeta WHERE meta_key='name' AND post_id IN (SELECT post_id FROM wp_postmeta WHERE meta_key='event_id' AND meta_value='19'); 

Вероятно, это выглядит смехотворно глупым – это тоже не работает. Я также попробовал JOIN. Это похоже на что-то, что очень сильно отразилось на WP-кодировании, но я искал и выглядел довольно пустым.

Если я правильно понимаю ваш вопрос, это должно работать:

 function get_event_info($event_id = 0, $info = '' ) { global $wpdb; return $wpdb->get_col( $wpdb->prepare( "SELECT meta_value from $wpdb->postmeta WHERE meta_key = '%s' AND post_id IN (SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = 'event_id' AND meta_value= %s )", $info, $event_id ) ); } 

Используйте это так:

 $names = get_event_info( 19 , 'Name' ); if ( ! empty($names) ) { echo '<ul>'; foreach ($names as $name) { echo '<li>' . $name . '</li>'; } echo '</ul>'; } 

Убедитесь, что второй параметр точно такой же, как meta_key : в вашем примере meta_key = 'Name' но SQL-запрос WHERE meta_key='name' , case is different!

Вы можете выбрать свои сообщения, используя параметр meta_query в классе WP_Query . Получите все идентификаторы сообщений, которые имеют общий event_id из 19.

Вы можете использовать идентификатор позже, чтобы получить все необходимые данные.