wordpress ajax关系查询

时间:2013-08-18 18:02:53

标签: sql wordpress

使用高级自定义字段中的关系字段我将艺术家链接到事件。这些艺术家和活动都是自定义帖子类型。对于每个事件,相关艺术家的帖子ID作为自定义元字段(lineup_artists)存储在数组中。

在每个活动页面上,我列出了所有艺术家。当您点击一位艺术家时,我想展示您可以找到这位艺术家的所有事件(通过AJAX调用,该调用以自举模式显示结果)。我已经测试了AJAX调用并且它正在运行,但查询有问题(需要很长时间才能完成)。

在我的功能中,我有:

$ArtistID = $_POST['ArtistID']; // Gets the ArtistID from the AJAX call

$meta_query = array(
    'key'       => 'lineup_artists',
    'value'     => '"' . $ArtistID .'"',
    'compare'   => 'LIKE'
);

    $args = array(
        'post_type'         => 'events',
        'meta_query'        => array($meta_query),
        'posts_per_page'    => 5,
        'post_status'       => 'publish',   
);

如果我转储wp_query的结果,我会得到以下sql查询:

SELECT SQL_CALC_FOUND_ROWS yt_posts.ID FROM yt_posts 

INNER JOIN yt_postmeta ON (yt_posts.ID = yt_postmeta.post_id)

WHERE 1=1 

AND yt_posts.post_type = 'events' 
AND (yt_posts.post_status = 'publish') 

AND ( (yt_postmeta.meta_key = 'lineup_artists' AND CAST(yt_postmeta.meta_value AS CHAR) LIKE '%\"17497\"%') ) 

GROUP BY yt_posts.ID ORDER BY yt_posts.post_date DESC LIMIT 0, 5

当我在phpmyadmin中粘贴此查询时,需要很长时间才能完成(我从未见过它,因为它需要很长时间)。

这是因为艺术家ID存储为数组吗?有人告诉我,这不是很有效,这些关系应该存储在一个单独的表中(我不知道该怎么做)。我的查询有问题,或者这是一种查询关系的效率很低的方法吗?

0 个答案:

没有答案