2014-01-13 6 views
0

У меня есть два SQL-запросов, которые я пытаюсь объединитьобъединить два SQL-запросы -

Первое:

SELECT * FROM wp_posts 
JOIN wp_postmeta on (post_id=ID) 
WHERE meta_key = "packageID" and meta_value = 1 
ORDER BY post_date limit 50 

присоединяется WordPress wp_post таблицы в wp_postmeta и получает все собрание сообщений с PackageID = 1 (я думаю, что это может быть безвкусным способом сделать это, но она работает)

второго

SELECT * FROM wp_postmeta 
JOIN wp_posts ON (meta_value=ID) 
WHERE post_id = 2110 
AND meta_key = '_thumbnail_id' 

снова присоединяется к таблице wp_post к таблице wp_postmeta, поэтому для сообщения с идентификатором 2110 он успешно получает миниатюру для этих сообщений. NB 2110 - всего лишь пример идентификатора

В Wordpress миниатюра - это своего рода пост. Таким образом, в этом примере текст, который представляет собой сообщение 2110, связан с сообщением 2115 - последний является миниатюрой

То, что я пытаюсь сделать, это получить список как в первом запросе, но также получить миниатюры, связанные с каждым сообщением

Я думаю, что нужно два присоединяется, но я не могу видеть, как это сделать (будучи SQL для начинающих)

NB это будет в сценарии за пределами Wordpress, поэтому я не могу использовать встроенные функции WordPress в

ответ

0

Вы можете попробовать это, если есть больше чем один уменьшенные изображения на пост вы можете получить список миниатюр, разделенной запятой

SELECT 
    *, 
    (SELECT 
    GROUP_CONCAT(meta_value) 
    FROM 
    wp_postmeta 
    WHERE post_id = wp.ID 
    AND wpm.meta_key = "_thumbnail_id") AS `thumbnails` 
FROM 
    wp_posts wp 
    JOIN wp_postmeta wpm 
    ON (wpm.post_id = wp.ID) 
WHERE wpm.meta_key = "packageID" 
    AND wpm.meta_value = 1 
ORDER BY wp.post_date 
LIMIT 50 

Примечание: GROUP_CONCAT имеет предел Concat символов, кроме вас может увеличить этот предел

Чтобы получить только один эскиз, вы можете попробовать это

SELECT 
    *, 
    (SELECT 
    (meta_value) 
    FROM 
    wp_postmeta 
    WHERE post_id = wp.ID 
    AND wpm.meta_key = "_thumbnail_id" LIMIT 1) 
FROM 
    wp_posts wp 
    JOIN wp_postmeta wpm 
    ON (wpm.post_id = wp.ID) 
WHERE wpm.meta_key = "packageID" 
    AND wpm.meta_value = 1 
ORDER BY wp.post_date 
LIMIT 50 
0

постарайтесь использовать следующий код

SELECT * FROM wp_posts wp JOIN wp_postmeta wm on (wp.post_id=wm.ID) WHERE wp.meta_key = "packageID" and wp.meta_value = 1 ORDER BY wp.post_date limit 50; 

использовать собственный псевдоним и попробовать его.

0

Попробуйте использовать столбец post_type. Вложения имеют post_type 'attachment'. При необходимости я могу объяснить это.

Также сообщение, к которому прикреплен миниатюру, будет в столбце post_parent.

0
global $wpdb; 

    $query7 = "SELECT distinct wp_postmeta.meta_value, wp_postmeta.meta_key, wp_posts.ID 
     FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
     INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) 
     WHERE wp_posts.ID = wp_postmeta.post_id 
     AND wp_posts.post_status = 'publish' 
     AND wp_postmeta.meta_key = 'packageID' 
     AND wp_postmeta.meta_value = 1 
     AND (mt1.meta_key LIKE '_thumbnail_id') 
    $output = $wpdb->get_results($query7); 

Используйте соединение с различными псевдонимами при соединении одного и того же стола более одного раза.

Надеюсь, это поможет.

0

Попробуйте это

SELECT * FROM wp_posts P1 
LEFT JOIN wp_postmeta M1 ON (M1.post_id=P1.ID) 
WHERE (M1.meta_key = "packageID" and M1.meta_value = 1) 
LEFT JOIN wp_postmeta M2 ON (M2.meta_key=P1.ID AND M2.meta_key = '_thumbnail_id') 
LEFT JOIN wp_posts P2 ON (M2.meta_value=P2.ID) 
ORDER BY P1.post_date limit 50 
Смежные вопросы