2017-11-30 1 views
2

업데이트 : 태그의 모든 값을 가져와야합니다!모든 태그 필드 값을 가져오고 모든 값을 필드에 입력하도록 쿼리하십시오.

MY 검색어 :

$query = db_select('node', 'node'); 
$query->fields('tagsdata',array('name')); 
$query->fields('node', array('nid')); 

$query->leftJoin('field_data_field_tags', 'tags', 'tags.entity_id = node.nid'); 
$query->leftJoin('taxonomy_index', 'tagsindex', 'tagsindex.nid = tags.entity_id'); 
$query->leftJoin('taxonomy_term_data','tagsdata','tagsdata.tid = tags.field_tags_tid AND node.nid = tagsindex.nid'); 

$result = $query->execute(); 

    while($record = $result->fetchAssoc()) { 
     $items[] = $record; 
    } 

AND MY 코드 :

//SORT 
    array_multisort(array_column($items, 'nid'), $items); 
foreach ($items as $row) { 

    $hash[$row[nid]] = $row; 
} 

$resultfinal = ($hash); 
    // END SORT 
foreach($resultfinal as $finalarrays) 
     { 
     $tags=$finalarrays['name']; 
     print_R ($tags); 
     } 

위의 코드를 그냥 태그 중 하나 개와 첫 번째 값을 반환, 내가 그들 모두를 인쇄해야!

답변

0
당신은 쉼표 (,)로 폭파 모든 값을 가져 GROUP_CONCAT MySQL의 기능을 사용할 수 있습니다

:

$result = db_query("SELECT tags.entity_id as nid, GROUP_CONCAT(t.name) as tdata FROM field_data_field_tags 
INNER JOIN taxonomy_term_data t ON t.tid = tags.field_tags_tid 
WHERE tags.entity_type = :type GROUP BY tags.entity_id", 
array(':type' => 'node'))->fetchAllKeyed(); 

NB :

db_query('SET SESSION group_concat_max_len=10000'); 
$result = db_query("SELECT tags.entity_id as nid, GROUP_CONCAT(t.name) as tdata FROM field_data_field_tags 
INNER JOIN taxonomy_term_data t ON t.tid = tags.field_tags_tid 
WHERE tags.entity_type = :type GROUP BY tags.entity_id", 
array(':type' => 'node'))->fetchAllKeyed(); 
: 때때로 당신은 당신에 의해 이전에 제한을 늘릴 필요가 너무 CONCAT 너무 많은 문자열이

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

foreach($result as $nid => $tags) { 
    echo $nid . ' : '.$tags; 
} 
+0

답변 주셔서 감사하지만,이에서 작동하지 나는'tdata' 필드에'foreach'로 모든 태그 값을 넣거나 다른 것을 제안해야합니다. 다른 제안을 할 수 있습니까? –

+0

업데이트, 시도해보고 알려주세요 :) @BijanZand – Fky

+0

내 업데이트를 볼 수 있습니까 @Fky –

관련 문제