wordpress query_posts для просмотра метаинформации - PullRequest
0 голосов
/ 19 апреля 2011

Я хочу выполнить запрос с query_posts, который позволяет мне смотреть на meta_fields.Я делал это раньше и достиг желаемого результата, но теперь по какой-то причине добавление дополнительного поля в уравнение ничего не возвращает.

Запрос ниже возвращает все attachments, где lottery_yearравный $y, и, очевидно, $y может быть 2011 или более ранним.

Теперь мой следующий шаг я хочу ввести еще один meta_field с именем photo_technique и датьзначение.

Вопрос, как мне это сделать?

$querystr = "
    SELECT $wpdb->posts.*
    FROM $wpdb->posts
    LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
    WHERE ($wpdb->postmeta.meta_key = 'lottery_year' AND $wpdb->postmeta.meta_value = $y)
    AND $wpdb->posts.post_type = 'attachment'
    ORDER BY $wpdb->postmeta.meta_value ASC
    LIMIT 100
";

1 Ответ

1 голос
/ 19 апреля 2011

Если вы хотите отображать сообщения, которые имеют lottery_year = $y ( или ) photo_technique = $x, вы можете использовать:

$querystr = "
    SELECT $wpdb->posts.*
    FROM $wpdb->posts
    LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
    WHERE ($wpdb->postmeta.meta_key = 'lottery_year' AND $wpdb->postmeta.meta_value = $y) OR ($wpdb->postmeta.meta_key = 'photo_technique' AND $wpdb->postmeta.meta_value = $x)
    AND $wpdb->posts.post_type = 'attachment'
    ORDER BY $wpdb->postmeta.meta_value ASC
    LIMIT 100
";

Редактировать

Если вы хотите отобразить результаты, которые имеют оба значения lottery_year = $y ( AND ) photo_technique = $x, вы можете использовать следующий запрос:

$querystr = "
    SELECT
        $wpdb->posts.*
    FROM 
        $wpdb->posts
    INNER JOIN $wpdb->postmeta ON
        $wpdb->posts.ID = $wpdb->postmeta.post_id 
        AND $wpdb->postmeta.meta_key IN ( 'lottery_year', 'photo_technique' )
        AND $wpdb->postmeta.meta_value IN ( '$y', '$x' )
    WHERE $wpdb->posts.post_type = 'attachment'
    GROUP BY $wpdb->posts.ID
    HAVING COUNT(1) = 2
    ORDER BY $wpdb->postmeta.meta_value ASC
    LIMIT 100
";

Редактировать

Последний запрос (И) в некоторых случаях будет неудачным. Например, вы хотите lottery_year = $y AND photo_technique = $x, но он также будет возвращать результаты с переключенными $ x и $ y следующим образом: lottery_year = $x AND photo_technique = $y, это действительно зависит от того, можете ли вы положиться на него или нет, как, например, у вас есть photo_technique, который называется, например, '2001 '(ведьма тоже может пройти как лотерея_год). Пожалуйста, будьте осторожны с этим или задайте этот вопрос на dba.stackexchange.com или wordpress.stackexchange.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...