2011-10-20 46 views
0

有问题的应用程序是分类网站。我使用查询来检索名为“cp_price”的字段中的值,以便为系统中的所有列表生成总值。SQL - 基于同一表中的另一个值排除行

我的目标是排除所有在“cp_ad_sold”字段中值为“yes”的列表。

下面是我使用来获取值查询:

$raw_prices = $wpdb->get_col($wpdb->prepare("  
    SELECT pm.meta_value FROM {$wpdb->postmeta} AS pm 
    LEFT JOIN {$wpdb->posts} AS p ON p.ID = pm.post_id 
    WHERE p.post_type = 'ad_listing' 
    AND p.ID = pm.post_id 
    AND pm.meta_key = 'cp_price' 
    ")); 

所以,我猜测需要做一个子查询?

我知道我需要的密钥和相应的值存储在postmeta表中,并与“cp_price”字段一起存储。我也知道“cp_price”和“cp_ad_sold”共享相同的“post_id”。

问题:如何根据“cp_ad_sold”键的值“yes”排除ad_listings及其各自的cp_price值?

注意:我正在使用WordPress,并考虑在WordPress Stackexchange上发布该问题。我认为这是一个严重的基于SQL的问题,并且认为这是最合适的场地。

回答

0

您可能还需要一个条件添加到WHERE子句 -

$raw_prices = $wpdb->get_col($wpdb->prepare("  
    SELECT pm.meta_value FROM {$wpdb->postmeta} AS pm 
    LEFT JOIN {$wpdb->posts} AS p ON p.ID = pm.post_id 
    WHERE p.post_type = 'ad_listing' 
    AND p.ID = pm.post_id -- Do you really need it? Check LEFT JOIN ... ON clause 
    AND pm.meta_key = 'cp_price' 
    AND cp_ad_sold <> 'yes' -- Something like this 
    ")); 
相关问题