뉴스 사이트를 구축했습니다 : - 기사는 날짜순으로 정렬 된 첫 페이지에 표시됩니다. 가장 새로운 것부터. - 뉴스는 "id", "title", "text"및 일부 필드와 함께 "news"테이블에 있습니다. - 모든 기사는 1-5 개의 관련 태그로 태그가 지정됩니다. - 태그는 "id", "tag", "article"및 일부 필드가있는 "tags"테이블에 있습니다. - "tags"필드 "article"은 "news"필드 "id"에 맞습니다.최고의 DB (MySQL) 구조 : 선호 태그가 포함 된 기사
이제 사용자가 "선호하는 태그 목록"에 태그를 추가 할 수있는 기회를 제공하고 싶습니다. 그런 다음 사용자는 선호하는 태그 중 하나를 포함하는 뉴스 기사 만 볼 수 있습니다.
사용자 Bob이 "barack obama", "nba", "new jersey"및 "dogs"태그를 선호한다고 가정합니다. 그는이 네 가지 태그 중 적어도 하나를 포함하는 기사 만보아야합니다.
어떻게 이것을 달성 할 수있는 PHP/MySQL 스크립트를 코딩 할 수 있습니까? 제 데이터베이스 구조가이 목적에 적합하지 않다고 생각합니까? 나는 이런 식으로 DB 쿼리를 만들어야 할 것입니다 :
"SELECT * FROM 뉴스에서 어디에서 태그를 ('barack obama', 'nba', 'new jersey', 'dogs') "
이 쿼리는 오랜 시간 동안 실행됩니다. 그렇습니까? 광산보다 더 적절한 데이터베이스 구조가 있어야합니다. 이 문제에 대한 아이디어가 있습니까? 어떤 DB 구조가 필요하며 어떤 쿼리를 사용해야합니까?
도와 주시면 감사하겠습니다. 미리 감사드립니다!
이 빠르고 좋은 답변을 주셔서 대단히 감사합니다. 마지막 질문 : 색인을 설정해야하는 필드는 무엇입니까? "news"에서 기본 ID로 "id"를 기본 태그로 "tag", "tag_id, news_id"를 기본 태그로 선택하고 "tag_map"에서 "news_id"를 선택했습니다. , 마지막으로 "user_id, tag_id"를 1 차로 지정하고 "tag_id"는 "favorite_tags"에 넣습니다. 이 올바른지? – caw
어딘가에 보이는 것처럼 보이지만, 테이블을 채우고 'EXPLAIN SELECT'등을하여 두 번 확인하십시오. –
tag_map.tag_id, news.id 및 favorite_tags.user_id에 대한 색인을 원한다고 생각합니다. 질문. –