Если вы хотите отображать сообщения, которые имеют 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.