나는 간단한 태깅 시스템 (PHP에서 장난)를 구현하기 위해 노력하고있어 같은 값 ... 내가 필요한 스레드, 저자를 얻기 위해 다음과 같은 SQL 명령을 사용얻기 GROUP_CONCAT의 개별 값
및 관련 태그 그것과 함께 :
$thread = select_Query("SELECT thread.title, thread.id as t_id,
thread.content, author.username, author.id as a_id,
GROUP_CONCAT(DISTINCT tags.name ORDER BY tags.name DESC SEPARATOR ',') AS tags
FROM thread JOIN thread_tags ON thread.id = thread_tags.thread_id
JOIN tags ON thread_tags.tag_id = tags.id
INNER JOIN author on author.id = thread.author_id
WHERE thread.id = $id", $link);
위에서 볼 수 있듯이 GROUP_CONCAT을 사용하고 있습니다. 이것은 잘 작동하지만, 이렇게하면 태그가 모두 하나의 변수에 나타나고 사용할 수 있다는 것을 알고 있습니다. $pieces = explode(",", $thread['tags]);
그러나 다른 방법이 있습니까? 태그는 구분하기 쉽기 때문에 좀 더 복잡한 내용 (예 : 구분 기호가 포함 된 항목)이 있기 때문에 요청하는 중입니다. 이름
스레드 : 아이디, 내용, 제목,
thread_tags author_id :
내 데이터베이스 스키마는 다음과 아이디, tag_id을
태그를 thread_id
태그에 구분 기호가 포함 된 이유는 무엇입니까? 나는 프로그램 자체가 그것을 태그 분리로 간주하고 그에 따라 처리해야한다고 생각할 것이다. –
태그가 아니라 태그가 스레드와 일대일 관계를 가질 수있는 다른 태그가있을 수 있습니다. "태그는 분리가 쉽지만 (예 : 구분 기호가 포함 된 것) 복잡한 경우가 있습니다." 그러나 부분은 더 복잡한 것을 말합니다. – eddienotizzard
이 게시물에 group_concat에 대한 몇 가지 힌트가 있습니다. http://stackoverflow.com/questions/452357/mysql-group-concat-escaping –