【问题标题】:difficult mysql query wordpress困难的mysql查询wordpress
【发布时间】:2016-02-09 17:52:41
【问题描述】:

你能帮我写一个困难的查询来计算 wordpress 上的帖子数吗?

情况是这样的:

  • wordpress 网站上有一个广告系统和搜索(过滤)。

  • 主页显示所有类别的列表以及每个类别中的广告数量。

  • 用户以城市、广告类型和关键字的形式输入。他可以输入所有参数,也可以只输入其中一个。
  • 脚本应显示每个类别中的广告数量。

我的脚本可以运行,但速度非常慢。

<?php

 $querystr = "SELECT *  FROM $wpdb->posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
WHERE (wp_term_taxonomy.term_id = ".$category->cat_ID." AND wp_term_taxonomy.taxonomy = 'category'
AND wp_posts.post_type = 'post'
AND wp_posts.post_status = 'publish')";

$pageposts = $wpdb->get_results($querystr, OBJECT);

$count=0;
foreach($pageposts as $post) { 
setup_postdata($post); 

$today = date('Y-m-d H:i:S');

$validity = get_post_meta($post->ID, 'valid_until', true);

$city = get_post_meta($post->ID, 'post_location', true);

$action = get_post_meta($post->ID, 'post_action', true);


$cities = explode("|", $city);

$session_city = $_SESSION["session_city"];

if($_SESSION["session_city"] and !$_SESSION["session_action"] or $_SESSION["session_action"]=='All') {
    if($validity >= $today and in_array($session_city, $cities)) { $count++;}
}

if($_SESSION["session_action"] and !$_SESSION["session_city"] or $_SESSION["session_city"]=='All') {
    if($validity >= $today and $action == $_SESSION["session_action"]) { $count++;}
}

if($_SESSION["session_action"] and $_SESSION["session_city"]) {
    if($validity >= $today and $action == $_SESSION["session_action"] and in_array($session_city, $cities)) { $count++;}
}

if(!isset($_SESSION["session_city"]) and !isset($_SESSION["session_action"])) {
    if($validity >= $today) { $count++;}
}


}

echo $count;

?>

【问题讨论】:

  • 除了删除邪恶的 'SELECT *' 之外,这个查询没有什么可以做的。大概一切都被正确索引了吗?解释说什么?
  • 计数不就等于返回的行数吗?
  • 当我使用 foreach 使用 php 计算广告时的缓慢部分。
  • 你分析过它吗?
  • 我投票结束这个问题,因为它是关于工作代码的优化,它更适合Code ReviewDatabase Administrators

标签: php mysql wordpress


【解决方案1】:
wp_term_taxonomy needs INDEX(taxonomy, term_id)
wp_term_relationships needs INDEX(term_taxonomy_id, object_id)

请提供SHOW CREATE TABLE wp_term_relationships;我怀疑它没有最佳定义。 (我假设它是其他两个表之间的多对多关系?)

如果可能,请提供EXPLAIN SELECT ...

Cookbook on building indexes.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多