PHP / MySQL - обновить массив, если переменная не существует

0

У меня есть массив с разными идентификаторами, которые я получаю из своей базы данных.

$fotos_temp_list=explode(",",$fotos_temp["fa_id"][0]);
Result: fa_id => 15,16,17,18

Теперь я хочу обновить все строки внутри другой таблицы с идентификаторами 15,16,17,18 и вставить конкретный '$id' в столбец с именем 'fa_ev_id'. В этом примере я установил:

$id=1;

Теперь мой цикл foreach выглядит следующим образом:

foreach ($fotos_temp_list as $key) {
    UPDATE images SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."' ";
}

Эта часть тоже работает. Каждая строка с моими идентификаторами (в моем примере: 15,16,17,18) обновляется.

Проблема. Когда я снова запустил цикл foreach, '$id' будет снова сохранен внутри строки. Посмотреть здесь:

Изображение 174551

Вопрос: Как возможно, что я могу проверить, есть ли '$id' уже внутри строки, и если да, то он пропускается? Вот что я пытался сделать:

foreach ($fotos_temp_list as $key) {
    if (!in_array($id,$key)===true) {
        UPDATE fotoalbum SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."'
    }
}

Я думаю, что функция in_array проверяет, есть ли '$id' уже внутри '$key' и если это правда, выполняется инструкция UPDATE. Поэтому я добавил '!in_array' но он не работает. Кто-нибудь имеет представление о том, что я делаю неправильно? Я просто хочу проверить, находится ли '$id' уже внутри моей строки базы данных, и если это так, он не должен снова вставлять '$id'. Я ценю любые советы.

  • 0
    Каков тип поля 'fa_ev_id'?
  • 2
    Больше похоже на проблему плохо структурированной базы данных. Пожалуйста, объясните мне, почему вы сохраняете идентификаторы в строке через запятую вместо типичной модели 1-ко-многим ?
Показать ещё 2 комментария
Теги:
arrays

1 ответ

1
Лучший ответ

Функция in_array() в php принимает массив как свой второй параметр, в (! In_array ($ id, $ key) === true), https://www.w3schools.com/php/func_array_in_array.asp. Второй параметр $ key, переданный здесь, не является массивом.

Вы можете сохранить тип данных fa_ev_id как json и получить и json_decode значение, когда вы собираетесь выполнить обновление в поле, чтобы узнать, существует ли этот идентификатор $ id с помощью in_array(), или вы можете получить значения, expolode их для формирования массива а затем проверьте, существует ли она с помощью in_array().

  • 0
    Спасибо. Я добавил ваш ответ как правильный ответ, потому что я проигнорировал, что ключ $ не может быть массивом. Я получил данные для каждого json и с помощью in_array () проверил, есть ли идентификатор. Он работает сейчас. Спасибо.
  • 1
    Пожалуйста, избегайте ссылок на сайты третьего уровня, такие как w3schools. Официальная документация почти всегда намного лучше, и включает комментарии сообщества, которые улучшают ее еще больше. Вот эквивалентная документация для in_array .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню