Измените Wordpress SQL Query для извлечения из категории - PullRequest
1 голос
/ 07 января 2011

Я использую плагин wordpress под названием «kf most read», который хранит счетчик того, сколько раз было прочитано сообщение, и позволяет выводить список наиболее прочитанных сообщений.

Это хорошо работает. Проблема в том, что я пытаюсь получить самые читаемые посты, но только самые читаемые посты в текущей категории, которую вы просматриваете.

Я близок к невежеству, когда дело доходит до sql.

Вот нам, что плагин в настоящее время использует, чтобы получить самые читаемые посты:

$ sql = "SELECT count (mr.post_ID) в виде totHits, p.ID, p.post_title из $ wpdb-> posts p ПРИСОЕДИНЯЕТСЯ {$ wpdb-> prefix} kf_most_read mr для mr.post_ID = p.ID где mr.hit_ts> = '". (time () - (86400 * $ period))."' GROUP BY mr.post_ID упорядочить по totHits desc, ID ASC LIMIT $ limit ";

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

$ sql. = "LEFT JOIN $ wpdb-> term_taxonomy ON ($ wpdb-> term_relationships.term_taxonomy_id = $ wpdb-> term_taxonomy.term_taxonomy_id)"; $ sql. = "WHERE $ wpdb-> term_taxonomy.term_id IN ($ currentcat)"; $ sql. = "AND $ wpdb-> term_taxonomy.taxonomy = 'category'";

Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

2 голосов
/ 07 января 2011

Вам необходимо объединить разделы from + join и предложения where вместе. Ваш оригинальный запрос

SELECT  count(mr.post_ID) as totHits, p.ID, p.post_title
-- from & join
  FROM  $wpdb->posts p
  JOIN  {$wpdb->prefix}kf_most_read mr
    ON  mr.post_ID = p.ID
-- where
  WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'
-- group, etc.
GROUP BY mr.post_ID
ORDER BY totHits desc, ID ASC LIMIT $limit

и ваши дополнительные пункты

-- from & join
LEFT JOIN $wpdb->term_taxonomy
    ON  ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
-- where
  WHERE $wpdb->term_taxonomy.term_id IN ($currentcat)
    AND $wpdb->term_taxonomy.taxonomy = 'category'

поэтому объединенный запрос должен быть

SELECT  count(mr.post_ID) as totHits, p.ID, p.post_title
-- from & join
  FROM  $wpdb->posts p
  JOIN  {$wpdb->prefix}kf_most_read mr
    ON mr.post_ID = p.ID
LEFT JOIN $wpdb->term_taxonomy
    ON  ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
-- where
  WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'
    AND $wpdb->term_taxonomy.term_id IN ($currentcat)
    AND $wpdb->term_taxonomy.taxonomy = 'category'
-- group, etc.
GROUP BY mr.post_ID
ORDER BY totHits desc, ID ASC LIMIT $limit

(Примечание: у вас может быть только один where, поэтому добавление второго как and)
то есть что-то вроде

$sql = "SELECT count(mr.post_ID) as totHits, p.ID, p.post_title FROM  $wpdb->posts p"
$sql .= " JOIN  {$wpdb->prefix}kf_most_read mr ON mr.post_ID = p.ID"
$sql .= " LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)"
$sql .= " WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'"
$sql .= " AND $wpdb->term_taxonomy.term_id IN ($currentcat)"
$sql .= " AND $wpdb->term_taxonomy.taxonomy = 'category'"
$sql .= " GROUP BY mr.post_ID ORDER BY totHits desc, ID ASC LIMIT $limit"

в зависимости от того, как вам нравятся разрывы строк. Надеюсь, что это работает!

На самом деле, я подозреваю, что вы действительно не хотите ЛЕВОГО СОЕДИНЕНИЯ для таблицы категорий / таксономии, но вместо этого должно быть простое СОЕДИНЕНИЕ. Но я не эксперт по схеме WP.

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