我做旅游网站 然后存储用户发表的文章 按照地名存储 比如西湖 昆明等 但是当用户访问时 我需要调用该地以及其下属地区所有的文章 我在文章里加入了地名信息(地名id以及name)
 
但是当我访问某一个地区时 比如云南 那么我需要调用关于云南 昆明 丽江 等下属地区的文章 此时我不能进行搜索 帮助我改善数据库 或者重新设计以下我不知道怎样进行数据库的规划 

解决方案 »

  1.   

    DROP DATABASE IF EXISTS travel_agent;
    CREATE DATABASE travel_agent;USE travel_agent;CREATE TABLE places (
        id INT PRIMARY KEY auto_increment,
        name VARCHAR(20) NOT NULL,
        fullname VARCHAR(255) NULL,
        parent_id INT NULL
    ) ENGINE = innoDB;ALTER TABLE places
        ADD FOREIGN KEY (parent_id) REFERENCES places (id);CREATE TABLE essays (
        id INT PRIMARY KEY auto_increment,
        title VARCHAR(255) NOT NULL,
        place_id INT NOT NULL
    ) ENGINE = innoDB;ALTER TABLE essays
        ADD FOREIGN KEY (place_id) REFERENCES places (id);DELIMITER /CREATE TRIGGER trig_set_fullname
        BEFORE INSERT ON places
        FOR EACH ROW        
            SET NEW.fullname = CONCAT(
                IF(ISNULL(NEW.parent_id), 
                   '', 
                   (SELECT fullname FROM places 
                                    WHERE id = NEW.parent_id)),
                ' ',
                NEW.name);
    /DELIMITER ;INSERT INTO places (id, name, parent_id)
        SELECT 1, '云南', NULL UNION
        SELECT 2, '昆明', 1    UNION
        SELECT 3, '丽江', 1;INSERT INTO essays (id, title, place_id)
        SELECT 1, 'YN', 1 UNION
        SELECT 2, 'KM', 2 UNION
        SELECT 3, 'LJ', 3;SELECT * FROM places;SELECT * FROM essays WHERE id IN (SELECT id FROM places WHERE fullname LIKE CONCAT((SELECT fullname FROM places WHERE name = '云南'), '%'));