За последние 24 часа нас посетили 18026 программистов и 1599 роботов. Сейчас ищет 891 программист ...

Реализация тэгов к статьям.

Тема в разделе "PHP и базы данных", создана пользователем Vicos, 24 май 2014.

  1. Vicos

    Vicos Активный пользователь

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте! Не могу осмыслить как реализовать тэги к статьям.
    Имеются 3 таблицы:
    1) post с полями id, title, content и т.д
    2) tag с полями id, name
    3) post-tag с полями id, post_id, tag_id
    Установлен внешний ключ post.id с полем post-tag.post_id и tag.id с полем post-tag.tag_id (верно, нет не уверен).
    А далее не пойму как добавлять статьи с тэгами и манипулировать данными(удаление добавление тэгов), так как при добавлении связей не удаётся добавить ни статью ни тэг. При установке ключей наоборот с таблицы post-tag с соответствующими полями вы даётся ошибка - "#1050 - Table '.\database_name\post@002dtag' already exists".
    Вот собственно на этом и застрял.
    Сам же пока в Гугле. Нашёл схожие статьи изучаю.
     
  2. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Зачем вообще разделял теги и статьи? Ты мог в той же таблице Post сделать поле keywords типа текст, которое бы мог потом использовать и в meta и в "тегах", что по сути является одним и тем же, за некоторыми исключениями...
    Но это уже лирическое отступление, раз уж решил разделить, то в чем проблема? Переведи в гугл транслейте текст ошибки и сразу поймешь в чем проблема)

    Добавлено спустя 2 минуты 31 секунду:
    Твоя схема данных была рабочей, зачем менять что-то?
     
  3. Vicos

    Vicos Активный пользователь

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Нет, нужно именно так сделать.
    Да ошибка мне ясна, значит внешние ключи всё же не верно привязаны. А вот как исправить ошибку если для этого удалить поле надо и нарушится структура не ясно мне.
     
  4. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Сообщение об ошибке тебе говорит о том, что ты пытаешься создать таблицу, которая уже существует. В смысле не верно? Насколько я помню в схеме все было нормально. Удали старую - добавляй новую.
     
  5. Vicos

    Vicos Активный пользователь

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Так удалил её, привязывать то не к чему. Чего то я не до понимаю. Обратно же ставится внешний ключ, от tag.id к post-tag.tag_id, а от post-tag.tag_id к tag.id нет.
     
  6. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Покурите отношения в реляционных СУБД, ок? Чтобы быть немного в курсе что и как устроено, что такое внешние ключи и что такое первичные. Вообще немного теории почитайте, будет полезно. И потом, здесь телепатов немного, пробуйте хотя бы чуточку стараться доносить свои мысли. Что, куда, как вы пытались вставить - остается только догадываться.

    ??? Я ушел
    [​IMG]
     
  7. Vicos

    Vicos Активный пользователь

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Прошу прощения за неясное выражение мыслей. Принимаюсь за изучение теории.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Просто показывай примеры.
     
  9. Vicos

    Vicos Активный пользователь

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    О пробеле в знаниях понимаю.
    Код (Text):
    1.  ALTER TABLE `post-tag` ADD FOREIGN KEY ( `tag_id` ) REFERENCES `hh_bd`.`tag` (
    2. `id`
    3. ) ON DELETE RESTRICT ON UPDATE RESTRICT ;
    4.  
    5. Ответ MySQL: Документация
    6. #1050 - Table '.\hh_bd\post@002dtag' already exists
    Наоборот
    Код (Text):
    1. ALTER TABLE `tag` ADD FOREIGN KEY ( `id` ) REFERENCES `hh_bd`.`post-tag` (
    2. `tag_id`
    3. ) ON DELETE RESTRICT ON UPDATE RESTRICT ;
    Отрабатывает.
    И второе поле
    Код (Text):
    1. ALTER TABLE `post` ADD FOREIGN KEY ( `id` ) REFERENCES `hh_bd`.`post-tag` (
    2. `post_id`
    3. ) ON DELETE RESTRICT ON UPDATE RESTRICT ;
    Но в таком случае не удаётся создавать посты и тэги в соответствующих таблицах. Собственно как решить проблему ещё не нашёл. Да видимо и сам принцип всего этого не ясен мне. Далее как добавляя посты и тэги к нему вписывать соответствующие данные в таблицы.
    Таблица post
    [​IMG]
    Таблица tag
    [​IMG]
    Таблица post-tag
    [​IMG]
     
  10. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Смотри, не буду вдаваться в изучение твоей писанины, сегодня мозг просто в ауте.
    Исходя из твоей задачи, тебе нужно следующее.

    Post:
    id - primary key

    Post-Tag:
    post_id - foreign key
    tag_id - foreign key

    Tag:
    id - primary key

    Эта схема будет отображать связь МхМ. Делаешь таблички такого вида, потом в phpMyAdmin переходишь на страницу обзора таблички Post -> нажимаешь ссылочку "вставить" -> заполняешь поля -> нажимаешь "Ok". Твои данные вставятся в таблицу, а вверху страницы отобразится выполненный запрос -> копируешь его и вставляешь его в блокнот. Это запрос вставки записи в таблицу Post. Аналогично делаешь с таблицами Tag и Post-Tag.

    И все... У тебя есть нужные тебе таблицы, нужные тебе запросы.