wordpress - Проблема с запросом в вордпрес на выборку по категорям


0

Нужно выбрать записи по нескольким критериям, один из которых принадлежность записи к нескольким рубрикам, одна из которых родительская 9 и другие дочернии 10,11.

Имеется вот такой запрос:

$query_string1 = "select p.*
from $wpdb->posts as p, 
$wpdb->postmeta as m1, $wpdb->term_relationships as m2, $wpdb->postmeta as m3
WHERE p.ID = m2.object_id and p.ID = m1.post_id and p.ID = m3.post_id 
and p.post_type=place and m2.term_taxonomy_id in (9,10,11)
and m3.meta_value=38 and m3.meta_key=school
and (m1.meta_value LIKE "%,$multi_city_id,%") and m1.meta_key = post_city_id
and p.post_status=publish
order by p.post_title ASC";

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

Источник
  •  1098
  •  1
  • 6 янв 2012 2012-01-06 22:48:59
Таблица term_relationships единственная с которой можно связать по Id записи, а в ней есть только поле term_taxonomy_id. В phpmyadminе запрос работает так же - если рубрика 9 есть, то выбираются записи, если её нет, то он просто не видит записей. Чёт голову уже сломал.. — 7 янв 20122012-01-07 04:27:16.000000
еще есть вариант, что ищите по term_taxonomy_id а надо по term_id, которые бывают 9,10,11. часто они совпадают, но необязательно... в общем надо смотреть содержание таблиц чтоб понять что и как. — 6 янв 20122012-01-06 23:45:45.000000
с m2 все в порядке, да. сложно воспринимать запрос в одну строку. по рубрикам: запрос не делит рубрики на "родительские" и "дочерние", смотрите таблицу m2, выбираются посты у которых рубрики имеют 9,10 или 11. по кавычкам: обычный sql принял бы это как одно зачение, притом строчное, а не три. попробуйте отладить запрос в phpmyadminе, на второй взгляд ошибок нету... — 6 янв 20122012-01-06 23:33:55.000000
Без кавычек вообще не работает. А почему вы решили, что m2 никак не связана с постами, когда это таблица рубрик? — 6 янв 20122012-01-06 22:44:30.000000
m2 у вас не связана никак с постами. покажите ее структуру. И отформатируйте код. Нечитаемо. Подозрительные кавычки 9,10,11 6 янв 20122012-01-06 22:33:02.000000

1 ответ

1

Вот такая связь видится верной.

SELECT wposts.*
FROM $wpdb->posts wposts
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.taxonomy = category
AND $wpdb->term_taxonomy.term_id in (9,10,11)
AND wposts.post_status = publish
AND wposts.post_type = post
ORDER BY wposts.ID DESC
LIMIT $post_num
естественно. это запрос, иллюстрирующий связи, ограничения нужно добавить по необходимости. в документации пишут про три таблицы, в которых описана логика рубрик, соответственно те id, которые вы берете в качестве id категорий должны соответствовать категориям, а не id из развязочных таблиц... По поводу distinct, ну да, просто вы писали что запрос не работает, а как именно не уточняли... — 7 янв 20122012-01-07 19:17:55.000000
Уже лучше)) Происходит задубление вывода записей, во сколько категорий указано, столько раз и выведет. И мне еще нужно было условие по таблице postmeta наложить, а тут её вообще нет. — 7 янв 20122012-01-07 15:20:01.000000