2012-09-10 2 views
6

쉼표로 구분 된 태그에서 고유 한 키워드를 선택, 그들은 양식에 있습니다어떻게 내 데이터베이스에서 일부 태그를 검색 할

tag1 tag2 tag3 tag4 tag5 tag6 tag7 
:

topic_id  tags 
    1  `tag1,tag2,tag3` 
    2  `tag1,tag4,tag5` 
    3  `tag2,tag4,tag5` 
    4  `tag6,tag7,tag2` 

내가 이런 걸 갖고 싶어

즉 모든 고유 태그

이러한 특정 태그가있는 뉴스 기사를 그룹화하기 위해 각 태그를 링크로 감쌀 수 있도록.

내가 지금까지 쓴이 다음 쿼리

가 작동하지 않습니다 :

$tags = mysql_query("SELECT tags, topic_id 
         FROM forum_topics 
         WHERE topic_id > 0") or die (mysql_error()); 
        while($tag = mysql_fetch_assoc($tags)){ 
        $split_tags = "$tag"; 
        $pieces = explode(",", $split_tags); 
        echo $pieces ; 

내가

print_r($pieces); 나는 내가 찾던없는 것이었다

Array ([0] => Array) Array ([0] => Array) Array ([0] => Array) Array ([0] => Array)을 얻었다했을 때.

지금 내 테이블 구조는 다음과 같습니다. topic_id , topic_head, topic_body, topic_tag, topic_date, topic_owner .. 어떻게 topic_tag를 정상적으로 만들 수 있습니까?

+2

작성한 테이블입니까? 그렇다면 명확하게 표준화되지 않았습니다. 정규화 된 테이블은 topic_id와 태그 사이에 1 대 1 매핑을 갖습니다. 그러면 당신이 원하는 것을 얻기 위해'forum_topics'에서'select distinct tags를 선택하는 것 '을 할 수 있습니다. –

+5

또한 코드에서 mysql_ * 함수를 사용하지 마십시오. 이 기능은 더 이상 유지 관리되지 않으며 [더 이상 사용되지 않습니다.] (http://news.php.net/php.internals/53799). 대신 [MySQLi] (http://php.net/mysqli) 또는 [PDO] (http://php.net/pdo)를 사용해야합니다. 어느 것을 사용해야할지 모르십니까? [이 기사] (http://php.net/manual/en/mysqlinfo.api.choosing.php)가 도움이 될 것입니다. –

답변

3

는, 당신은 당신의 데이터베이스 구조로, 지금은 매우

SELECT DISTINCT tags FROM forum_topics WHERE topic_id > 0 

에 의해 쉽게하지만 모든 별개의 태그를 얻을 수있는, 당신이 할 수 없어, 당신은에 있습니다 모든 태그를 가져 와서 array_unique을 사용하십시오.

$tags = array(); 
$rows = mysql_query("SELECT tags FROM forum_topics WHERE topic_id > 0") or die (mysql_error()); 
while($row = mysql_fetch_assoc($rows)){ 
    $tags = array_merge($tags, explode(',' $row['tags'])); 
} 
$tags = array_unique($tags); 
print_r($tags); 

그러나 심지어 당신이 할 수있는, 데이터베이스 설계가 최선의 선택을 정상화.

+0

답변 해 주셔서 감사합니다. 이제 테이블 구조는 다음과 같습니다 'topic_id, topic_head, topic_body, topic_tag, topic_date, topic_owner' .. 어떻게 topic_tag를 정상적으로 만들 수 있습니까? –

+1

@DotOyes 주제와 태그의 관계를 관리하기 위해'topic_tags' 테이블을 새로 만듭니다. – xdazz

2

이 시도 :

$tags = ""; 
while($row = mysql_fetch_assoc($tags)) { 
    $tags .= $row["tags"] . ","; 
} 

$tags = rtrim($tags, ","); 
$pieces = explode(",", $tags); 

print_r($pieces); // all of them 

$pieces = array_unique($pieces); 

print_r($pieces); // distinct 

... 그리고 Jonah Bishop already mentioned로, mysql_* 기능을 피해주십시오. 당신이 당신의 데이터베이스 디자인을 정규화 경우

0
select distinct tags from forum_topics; 
+1

나는 이것이 OP가 원하는 결과가 될 것이라고 100 % 확신하지 못했습니다. 그의 테이블은 정규화되지 않았으므로 항목이있는 것만 큼 많은 결과를 얻을 수 있습니다. –

+0

아, 그게 상황을 복잡하게합니다. (그리고 당신의 코멘트를 보지 못해 죄송합니다.) –

관련 문제