2012-10-28 2 views
0

이 코드는 현재 범주의 태그 만 표시하지만 모든 태그 (수백)를 가져옵니다. 반환 된 결과의 수를 제한하고 임의로 지정해야합니다.wpdb 쿼리에 대한 결과 제한

이 쿼리를 만드는 방법은 임의로 20 개의 결과 만 얻으실 수 있습니까?

/* Retrieve all tags from posts in selected categories */ 

$cats = array('beaches','mountains'); // Must be an array even if only one category 
$cats_string = "'" . implode($cats,"','") . "'"; 
$sql = <<<EOSQL 
SELECT DISTINCT t.* 
FROM $wpdb->posts p 
JOIN $wpdb->term_relationships tr ON p.ID = tr.object_id 
JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id 
    AND tt.taxonomy = 'post_tag') 
JOIN $wpdb->terms t ON tt.term_id = t.term_id 
WHERE 
    p.ID IN (
     SELECT p2.ID 
     FROM $wpdb->posts p2 
     JOIN $wpdb->term_relationships tr2 ON p2.ID = tr2.object_id 
     JOIN $wpdb->term_taxonomy tt2 ON (tr2.term_taxonomy_id = tt2.term_taxonomy_id  AND tt2.taxonomy = 'category') 
    JOIN $wpdb->terms t2 ON (tt2.term_id = t2.term_id AND t2.name IN ($cats_string)) 
    WHERE p2.post_type = 'post' 
    AND p2.post_status = 'publish' 
    AND p2.post_date <= NOW() 
) 
    EOSQL; 

$terms = $wpdb->get_results($sql); 

// print_r($terms); 

echo "<br />"; 
foreach ($terms as $term) { 
    echo "ID:$term->term_id NAME:$term->name SLUG:$term->slug<br />"; 
} 

감사

답변

2

당신이 괜찮은 번에 실행할 수있는 테이블의 크기에 따라 한 ORDER BY RAND() LIMIT 20 시도 할 수 있습니다. order by rand() 로직을 피하는 방법에 대한 자세한 내용은 here을 참조하십시오. 제안 된 것처럼 지정된 게시물에서 다른 방법은 모든 항목을 검색하고 mysql을 사용하는 대신 PHP에서 20 개의 항목을 무작위로 선택하는 것입니다.

+0

도움을 주셔서 감사합니다. 일부 시행 착오 후에 올바른 위치에 매개 변수를 배치하면 작동합니다. :) –

+0

@Johnmido 여러분 안녕하세요. – dan