2011-08-08 3 views
0

내 사이트의 가장 인기있는 10 개의 태그 (주제)를 오른쪽 메뉴의 요소로 나열하고 싶습니다.Cakephp에서 2 개 미만의 검색어로 이야기의 수와 함께 모든 태그 (HABTM)를 나열하는 방법은 무엇입니까?

그러나 지금은 30 분 정도 걸리 겠지만 1 문장으로 끝나는 것과는 달리 사이트의 성능을 크게 떨어 뜨릴 3 문장으로 끝나는 것 같습니다.

나는 단편 소설과 태그가있는 사이트가 있습니다. 이 테이블은 'stories_tags'테이블을 사용하여 HABTM (has-and-belong-to-many) 관계입니다. 이야기는 여러 개의 태그를 가질 수 있으며 태그는 여러 개의 이야기로 사용될 수 있습니다.

목표는 태그 당 최고 이야기 수에서 $ tagname ($ storycountwiththattag)을 10 위까지 나열하는 것입니다. 나는 지금까지 이것을 가졌지 만 너무 가까워 보이지 않는다.

$tags = $this->Tag->find('all',array('fields'=>array('Tag.name'))); 
$tags_count = $this->Tag->Story->find('count',array('conditions'=>array('Story.tag'=>$tags))); 
debug($tags_count); 

가능한 많은 쿼리를 시도했습니다. 태그 당 1 카운트 쿼리를 실행하는 모든 태그

  • 의 모든 ID의의를 얻기

    1. ...
    2. 그 결과를 사용 : 나는 제한된 찾기 ('모든')의 또는과는 함께 할 수 있습니다.

    그러나 더 나은 응용 프로그램을 만들기 위해 Cakephp를 선택 했으므로 사람들이 어떻게하는지 궁금해졌습니다! 이 사이트는 매일 수백 명의 방문자를 확보하기 때문에 성능이 극히 중요하지는 않지만 성능에 대한 불이익이 중요하지 않을지라도 무언가를 극도로 처신하지 않아도되도록 노력해야합니다.

  • 답변

    1
    태그에

    사용 counterCache (당신이 생각 HABTM와 함께 사용할 수는 없지만, 다른 "태그 hasMany의 StoriesTag"관계를 정의해야합니다. 당신은 또한 Cache 쿼리 결과.

    0

    나는 몇 가지 테스트를 할 수 동일한 시나리오하지만 differents의 ModelNames에. 나는 당신이 그것을 사용할 수 있기를 바랍니다.

    function top(){ 
    
        $options = array(
          'fields' => array('*','COUNT(CategoriesEnterprise.enterprise_id) AS num') 
         , 'group' => array('CategoriesEnterprise.category_id') 
         , 'order' => 'num DESC' 
         , 'limit' => '3' 
         , 'joins' => array(array(
          'table' => 'categories', 
          'alias' => 'Category', 
          'type' => 'LEFT', 
          'conditions' => array('CategoriesEnterprise.category_id = Category.id') 
         )) 
        ); 
    
        $categories = $this->Category->CategoriesEnterprise->find('all', $options); 
    
        debug($categories); 
        $this->autoRender = false; 
    } 
    

    결과

    Array 
        (
         [0] => Array 
         (
          [CategoriesEnterprise] => Array 
           (
            [category_id] => 3 
            [enterprise_id] => 7 
           ) 
    
          [Category] => Array 
           (
            [id] => 3 
            [name] => Turismo y Viajes 
            [modified] => 2011-05-16 
            [created] => 2011-04-14 
           ) 
    
          [0] => Array 
           (
            [num] => 4 
           ) 
    
         ) 
    
        [1] => Array 
         (
          [CategoriesEnterprise] => Array 
           (
            [category_id] => 24 
            [enterprise_id] => 5 
           ) 
    
          [Category] => Array 
           (
            [id] => 24 
            [name] => Compras 
            [modified] => 2011-05-05 
            [created] => 2011-05-05 
           ) 
    
          [0] => Array 
           (
            [num] => 3 
           ) 
    
         ) 
    
        [2] => Array 
         (
          [CategoriesEnterprise] => Array 
           (
            [category_id] => 32 
            [enterprise_id] => 8 
           ) 
    
          [Category] => Array 
           (
            [id] => 32 
            [name] => Salud y Belleza 
            [modified] => 2011-05-16 
            [created] => 2011-05-16 
           ) 
    
          [0] => Array 
           (
            [num] => 3 
           ) 
    
         ) 
    
    ) 
    
    관련 문제