За последние 24 часа нас посетили 21772 программиста и 1690 роботов. Сейчас ищет 1931 программист ...

Вставка данных если их нет в таблице

Тема в разделе "MySQL", создана пользователем Alesto, 25 май 2017.

  1. Alesto

    Alesto Новичок

    С нами с:
    15 янв 2017
    Сообщения:
    72
    Симпатии:
    8
    Всем привет. Пытаюсь грамотно обработать поступление новых тегов от пользователей.
    Есть форма где пользователь может добавить как свои теги так и уже имеющиеся в базе. Вопрос, можно ли одним запросом узнать какие теги есть в базе а какие нет?

    Я хотел через where in сделать но он естественно возвращает только те id которые уже есть, может быть можно с ним как-то поиграться и сделать map?

    PHP:
    1.   public function getForecastTags($tags) {
    2.     $ids = explode(',', $tags);
    3.     $inQuery = implode(',', array_fill(0, count($ids), '?'));
    4.     try {
    5.       $stm = $this->db->prepare("SELECT `tags`.`id` FROM `tags` WHERE `tags`.`text` IN ($inQuery)");
    6.       foreach($ids as $k => $v) {
    7.       echo $stm->bindValue(($k + 1), $v);
    8.       }
    9.       return $stm->execute();
    10.     } catch (PDOException $e) {
    11.       $e->getMessage();
    12.     }
    13.   }
    insert ignore наверное не подойдет потому что данные разбиты по разным таблицам.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    может имеет смысл хранить в одной таблице?
     
  3. Alesto

    Alesto Новичок

    С нами с:
    15 янв 2017
    Сообщения:
    72
    Симпатии:
    8
    Возможно, но не я делал архитектура базы, да и теги используются в разных "случаях".
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    может тогда использовать -
    array_diff
    ?
     
  5. Alesto

    Alesto Новичок

    С нами с:
    15 янв 2017
    Сообщения:
    72
    Симпатии:
    8
    Взять все теги с базы и применить array_unique с входными параметрами?
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.584
    Симпатии:
    1.762
    имя тега - уникальным ключём, и insert ignore в помощь. MySQL уже об этом позаботился.
     
    Alesto нравится это.