簡體   English   中英

查詢以獲取所有標簽字段值並將所有值倒入字段

[英]Query to get a all tags field values and pour all value in field

更新:我需要獲取標簽字段的所有值!

我的查詢:

$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;
    }

和我的代碼:

    //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);
      }

使用上面的代碼只是返回標簽的第一個和第一個值,我需要打印所有標簽!

您可以使用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();

注意:有時您需要連接的字符串太多,因此需要在以下之前增加限制:

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();

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM