Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Запрос-выборка постов из базы WordPress (http://www.flasher.ru/forum/showthread.php?t=202882)

djyamato 16.08.2013 22:27

Запрос-выборка постов из базы WordPress
 
Вложений: 3
Приветствую
В базе есть таблицы
wp_posts
В ней все посты, с названием, полной новостью итд

Также есть таблица wp_term_taxonomy, ассоциации, тут кроме всего прочего располагаются записи о некоторых типах данных, по которым мне нужно делать выборку.
Столбцы в этой таблице
Вложение 29919

Также есть таблица
wp_term_relationships
Вложение 29920

И таблица wp_terms
Вложение 29921

Для выборки всех постов, у которых в поле wp_terms есть "Феодосия" я использую такой запрос
Код:

SELECT post_title,post_content FROM wp_posts WHERE id IN (SELECT object_id from wp_term_relationships WHERE term_taxonomy_id IN (SELECT term_taxonomy_id
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.taxonomy
IN (
'location'
)
AND name="Феодосия"
ORDER BY t.name ASC))

Долго мучался, но вроде правильно работает запрос.
А как составить этот же запрос но, чтобы выбирались, скажем, в этом городе, но еще и только wp_terms.slug (то есть, walk,aboard,fly,drive) я не могу. Помогите пожалуйста его составить.

djyamato 17.08.2013 13:50

--------------------------------------------------------
Задача решается использованием библиотеки вордпресса WP_Query

wvxvw 17.08.2013 14:23

Код:

SELECT post_title, post_content FROM wp_posts
JOIN wp_term_relationships
  ON wp_term_relationships.object_id = wp_posts.term_taxonomy_id
JOIN wp_terms
  ON wp_terms.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE name = "Феодосия" AND wp_term_taxonomy.taxonomy = "location"
ORDER BY wp_terms.name ASC

Не берусь утверждать, т.как конкретно таблицы Вордпресса не знаю, но вышеприведенный запрос лучше было бы переписать как-то так... такими подзапросами вы сильно мешаете планировщику оптимизировать запрос.

Вопрос я не совсем понял, вы хотите фильтровать по wp_terms.slug, или вернуть его вместе с уже имеющимся результатом?
Если 1. то добавьте его в where соответствующий, если 2. то добавьте его в первый select.

djyamato 22.08.2013 23:08

Спасибо за совет про планировщик, но я очень далек от оптимизации запросов.
Мне нужно было выбрать все посты из таблицы wp_posts, так чтобы в таблице wp-terms из столбца name выбирался "Пешком" + только те посты которые соответствуют городу "Феодосия"

Получается вот такая штучка
PHP код:

$args = array(
    
'post_type' => 'excurtion',
    
'tax_query'=>array(
        array(
                
'taxonomy'=>'listingtype',
                
'field'=>'slug',
                
'terms'=>'walk'
                
),
        array(
                
'taxonomy'=>'location',
                
'field'=>'slug',
                
'terms'=>'feodosia'
                
)    
        )
    );

$query = new WP_Query$args );
    if ( 
$query->have_posts() ) {
        while ( 
$query->have_posts() ) {
            
$query->the_post();
            
$id get_the_id();
            
$title get_the_title();
            
$content get_the_content();
            echo 
'<li>' $title .'     || '.$content.'  || ID='.$id.'<br>';

            
$argsThumb = array(
                        
'order'          => 'ASC',
                        
'post_type'      => 'attachment',
                        
'post_parent'    => $id,
                        
'post_mime_type' => 'image/jpeg'
                    
);
            
$attachments get_posts($argsThumb);
            if (
$attachments) {
                foreach (
$attachments as $attachment) {
                    echo 
apply_filters('guid'$attachment->guid).'<br>';
                }
            }
            echo 
'</li>';
        }
    } else {
        
// no posts found
    


Причем, он и картинки к постам сразу извлекает, хорошая штука одним словом


Часовой пояс GMT +4, время: 20:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.