0

さて、次のようなクエリがあります。

   "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を使用して(またはクエリを変更して)何らかの方法でデータをフィルタリングして、異なる値を1回だけ表示する方法はありますか。現在、ループを使用してデータを循環し、同じタグとサブタグを複数回表示していますが、結果をさらにフィルタリングする方法がわかりません。

これを行う方法についての洞察をいただければ幸いです。

4

2 に答える 2

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>';

質問を正しく理解したことを本当に願っています。

于 2013-08-20T20:01:02.860 に答える
0

クエリを編集して、必要と思われる結果を 1 行で表示する方法を次に示します。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
于 2013-08-20T20:04:49.863 に答える