2017-11-30 2 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 CODE:上記のコードで

//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 –

関連する問題