2016-04-14 28 views
0
Ben çekirdek cron ile bu sorguyu çalıştırmadan am

üzerinde 1'den fazla satır döndürür:WordPress Alt sorgu özel Wordpress eklenti tarafından SELECT'in

FastCGI sent in stderr: "PHP message: Database error of WordPress Subquery returns more than 1 row for SELECT

Bu nasıl çözmek için:

// MAKE SQL CALL 
    $SQL = "SELECT ".$wpdb->prefix."postmeta.post_id FROM ".$wpdb->prefix."postmeta 
    INNER JOIN ".$wpdb->prefix."posts ON (".$wpdb->prefix."posts.ID = ".$wpdb->prefix."postmeta.post_id)  
    WHERE ".$wpdb->prefix."postmeta.meta_key = '".$core_admin_values['listing_expiration']['key']."' 
    AND ".$wpdb->prefix."posts.post_status = 'publish' 
    AND ".$wpdb->prefix."postmeta.post_id = (SELECT ".$wpdb->prefix."postmeta.post_id FROM ".$wpdb->prefix."postmeta WHERE ".$wpdb->prefix."postmeta.meta_key = 'listing_status' AND ".$wpdb->prefix."postmeta.meta_value != 1) 
    AND ".$wpdb->prefix."posts.post_type = '".$core_admin_values['listing_expiration']['taxonomy']."_type' 
    AND DATE(".$wpdb->prefix."postmeta.meta_value) < DATE(NOW())";  
    $expired_listings = (array)$wpdb->get_results($SQL); 

Ama bu hatayı döndürür? Stack'deki benzer problemlerle bazı çözümleri denedim, ancak yine de başarısız oluyor.

+0

Lütfen denediğiniz çözümlerin bağlantılarını sağlayın. –

cevap

0

YAPMAK alt sorgu

üzerinde LIMIT eklemeyi deneyin.

Sorununuzun, bulunduğunuz yerdeki alt sorgudan kaynaklandığından şüpheleniyorum. Bu öbek birden fazla sonuç döndürdüğü için. Birden fazla sonuca karşı eşleşmek isterseniz, "=" ifadesini "in" olarak değiştirin:

AND postmeta.post_id in 
    (
     SELECT 
     postmeta.post_id ... 
) 
+0

Merhaba Beardo. Bahşiş için teşekkür ederim. Basit, eksiksiz ve mükemmel bir şekilde problemi çözdünüz. – user3416348

0

// Ben Sorgunuzla yeniden biçimlendirilmiş okunabilirlik uğruna, SQL ÇAĞRI

$SQL = "SELECT ".$wpdb->prefix."postmeta.post_id FROM ".$wpdb->prefix."postmeta 
    INNER JOIN ".$wpdb->prefix."posts ON (".$wpdb->prefix."posts.ID = ".$wpdb->prefix."postmeta.post_id)  
    WHERE ".$wpdb->prefix."postmeta.meta_key = '".$core_admin_values['listing_expiration']['key']."' 
    AND ".$wpdb->prefix."posts.post_status = 'publish' 
    AND ".$wpdb->prefix."postmeta.post_id = (SELECT ".$wpdb->prefix."postmeta.post_id FROM ".$wpdb->prefix."postmeta WHERE ".$wpdb->prefix."postmeta.meta_key = 'listing_status' AND ".$wpdb->prefix."postmeta.meta_value != 1 LIMIT 1) 
    AND ".$wpdb->prefix."posts.post_type = '".$core_admin_values['listing_expiration']['taxonomy']."_type' 
    AND DATE(".$wpdb->prefix."postmeta.meta_value) < DATE(NOW())";  
    $expired_listings = (array)$wpdb->get_results($SQL);