0

使用高级自定义字段中的关系字段,我将艺术家链接到事件。这些艺术家和事件都是自定义帖子类型。对于每个事件,相关艺术家的帖子 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 存储为数组吗?有人告诉我这不是很有效,这些关系应该存储在一个单独的表中(我不知道该怎么做)。我的查询是否有问题,或者这是查询关系的一种非常低效的方式?

4

0 回答 0