Wordpress SQL Выберите несколько мета-значений / мета-ключей / пользовательских полей - PullRequest
0 голосов
/ 28 марта 2010

Я пытаюсь изменить функцию WordPress / MySQL, чтобы отобразить немного больше информации. В настоящее время я выполняю следующий запрос, который выбирает сообщение, присоединяется к 'postmeta' и получает информацию, где meta_key = _liked

    function most_liked_posts($numberOf, $before, $after, $show_count) {
 global $wpdb;

    $request = "SELECT ID, post_title, meta_value FROM $wpdb->posts, $wpdb->postmeta";
    $request .= " WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id";
    $request .= " AND post_status='publish' AND post_type='post' AND meta_key='_liked' ";
    $request .= " ORDER BY $wpdb->postmeta.meta_value+0 DESC LIMIT $numberOf";
    $posts = $wpdb->get_results($request);

    foreach ($posts as $post) {
     $post_title = stripslashes($post->post_title);
     $permalink = get_permalink($post->ID);
     $post_count = $post->meta_value;

     echo $before.'<a href="' . $permalink . '" title="' . $post_title.'" rel="nofollow">' . $post_title . '</a>';
  echo $show_count == '1' ? ' ('.$post_count.')' : '';
  echo $after;
    }
}

Важная часть: $post_count = $post->meta_value;

Но теперь я хочу также получить значение, которое прикреплено к каждому сообщению с именем wbphoto

Как мне указать, что $ post_count = _liked и $ photo = wbphoto

Вот крышка экрана моего Phpmyadmin альтернативный текст http://i44.tinypic.com/ioisuv.png

Ответы [ 3 ]

2 голосов
/ 28 марта 2010

SQL будет выглядеть очень некрасиво.

// Your Meta key names
    $metas = array(
        '_liked', '_another1'
    );

    foreach ($metas as $i=>$meta_key) {
        $meta_fields[] = 'm' . $i . '.meta_value as ' . $meta_key;
        $meta_joins[] = ' left join ' . $wpdb->postmeta . ' as m' . $i . ' on m' . $i . '.post_id=' . $wpdb->posts . '.ID and m' . $i . '.meta_key="' . $meta_key . '"';
    }
    $request = "SELECT ID, post_title, " .  join(',', $meta_fields) . " FROM $wpdb->posts ";
    $request .=  join(' ', $meta_joins);
    $request .= " WHERE post_status='publish' AND post_type='post'";
    $request .= " LIMIT $numberOf";

Лучше будет сделать еще один SQL для извлечения мета.

0 голосов
/ 26 июня 2012

Изменить запрос, как показано ниже:

$request = "SELECT ID, post_title, meta_value FROM $wpdb->posts p, $wpdb->postmeta pm, $wpdb->postmeta pm1";
    $request .= " WHERE p.ID = pm.post_id";
    $request .= " AND p.post_status='publish' AND p.post_type='post' AND pm.meta_key='_liked' AND pm1.meta_key='wbphoto';
    $request .= " ORDER BY pm.meta_value+0 DESC LIMIT $numberOf";
0 голосов
/ 26 мая 2010

Не знаю, может ли это вам помочь, но вот рабочий запрос SQl, который получает сообщения и post_meta.

SELECT DISTINCT ID, p.post_title, p.post_status, p.post_date, m.meta_key, m.meta_value 
FROM wp_posts p, wp_postmeta m
WHERE p.post_author = 2 
AND p.post_status = 'publish' 
AND p.post_date >= '2009-01-01' 
AND p.post_date <= '2010-05-28'
AND p.ID = m.post_id
...