从数组中过滤数据,这是mysql查询的结果

时间:2013-08-20 18:59:29

标签: php mysql similarity

好的,我的查询看起来像这样:

   "SELECT `tag_name`,`sub_tag_name` FROM phpro_tag_targets targets
    INNER JOIN  sub_tags ON targets.sub_tag_id=sub_tags.sub_tag_id
    INNER JOIN phpro_tags tags ON targets.tag_id=tags.tag_id
    WHERE tag_target_id='{$vid['tag_target_id']}'";

表格本身如下:

phpro_tag_targets

   tag_target_id | tag_id  | sub_tag_id | tag_target_name | tag_type_id
     int(11)     | int(11) | int(11)    |  var_char        | int(3)
    <PK - index> |   <fk>  |  <fk>    

phpro_tags

  tag_id | tag_name
   <PK>  | VARCHAR
  sub_tags:
   sub_tag_id | sub_tag_name
     <PK>     | VARCHAR

,查询结果看起来像这样

Array ( 
    [0] => Array ( [tag_name] => Humanity [sub_tag_name] => Children ) 
    [1] => Array ( [tag_name] => Society [sub_tag_name] => Children ) 
    [2] => Array ( [tag_name] => Art and Artists [sub_tag_name] => Creativity ) 
    [3] => Array ( [tag_name] => Humanity [sub_tag_name] => Creativity ) 
    [4] => Array ( [tag_name] => Humanity [sub_tag_name] => Culture ) 
    [5] => Array ( [tag_name] => Society [sub_tag_name] => Culture ) 
    [6] => Array ( [tag_name] => unlisted [sub_tag_name] => Culture ) 
    [7] => Array ( [tag_name] => unlisted [sub_tag_name] => Culture ) 
)

结果是与一段内容(即视频或文章)相关联的标签和子标签。我试图在html中显示此信息,以便我有<span class="tags"><span class="subtags">。对于上述例如。数据html看起来像这样:

   <span class="tags"> Humanity Society Art and Artists unlisted </span>
   <span class=subtags> Children Creativity Culture </span>

有没有办法可以使用php(或更改查询)以某种方式过滤数据,这样我只能一次显示每个不同的值。因为我目前正在使用循环来遍历数据并多次显示相同的标签和子标签,但无法弄清楚如何进一步过滤结果。

深入了解我如何做到这一点非常感谢!

2 个答案:

答案 0 :(得分:3)

首先,您需要遍历数据数组并将所有标记名称和子标记名称收集到单独的数组中。然后使用array_unique从数组中删除重复值。最后使用implode将数组元素连接到字符串。

$tags = array();
$sub_tags = array();

// NOTE: $array is query result array
foreach ( $array as $value ) {
    $tags[] = $value['tag_name'];
    $sub_tags[] = $value['sub_tag_name'];
}

$tags = array_unique( $tags );
$sub_tags = array_unique( $sub_tags );

echo '<span class="tags">'.implode( ' ', $tags ).'</span>';
echo '<span class="subtags">'.implode( ' ', $sub_tags ).'</span>';

我真的希望我能正确理解这个问题。

答案 1 :(得分:0)

以下是如何编辑查询,以便根据我认为您需要的内容提供一行结果。具有DISTINCT选项和“'的SEPARATOR”的GROUP_CONCAT函数应该为您提供所需的格式。

SELECT GROUP_CONCAT(DISTINCT `tag_name` SEPARATOR ' '),
       GROUP_CONCAT(DISTINCT `sub_tag_name`SEPARATOR ' ') 
FROM phpro_tag_targets targets
INNER JOIN sub_tags ON targets.sub_tag_id=sub_tags.sub_tag_id
INNER JOIN phpro_tags tags ON targets.tag_id=tags.tag_id
WHERE tag_target_id='{$vid['tag_target_id']}'

此输出将为

tag_name | sub_tag_name
Humanity Society Art and Artists unlisted | Children Creativity Culture