Добрый день, есть таблица в ячейке которой хранятся ID пользователей через ; Мне нужно достать эту строку из таблицы, удалить пользователя и сделать update ячейки с оставшимися пользователями. Делаю так: PHP: function deleteUser($userID){ $this->db->select('user'); //ячейка с пользователями $this->db->where('ip', $ip); //необходимая мне строка $query = $this->db->get('database'); // необходимая мне таблица $row = $query->row(); //тащим строку $split = preg_split("/;/", $row->Operator, -1, PREG_SPLIT_NO_EMPTY); // сплитим ; ,без этого (-1, PREG_SPLIT_NO_EMPTY) оставался один пустой массив. $result =""; //строка для заполнения foreach (array_keys($split, $userID) as $key) { unset($split[$key]); // проходимся по массиву ищем нашего пользователя которого надо удалить, удаляем. } foreach ($split as $item) { $result .= $item.';'; //вставляем оставшихся пользователей в строку через ; } $this->db->set('user', $result); $this->db->where('ip', $ip); $this->db->update('database'); //вставляем все обратно } Меня тут смущает два foreach и вообще правильно ли все делаю? Работать работает все
@Artur_hopf, какую СУБД используете? Кроме того: В массиве можно искать не перебором, функцией array_search() Ну и ещё есть функции implode() и explode()
Использую mssql, спасибо, переписал так: PHP: //вместо этого: foreach (array_keys($split, $userID) as $key) { unset($split[$key]); } //вот так: $key = array_search($userID, $split); unset($split[$key]); Только вопрос, если несколько совпадений(такого не бывает, но все же), то как array_search отработает?
@Artur_hopf, хранение в одной ячейке нескольких значений это прямое нарушение первого закона нормализации БД. В 99% случаев - это говорит о неправильной архитектуре БД. И только 1% оставляю для сознательной денормализации, в 99% которой такое хранение не отменяет хранение тех же самых данных в нормальной форме. Да и то лишь в том случае когда актуальность данных не равна 100%.
@Valick Да, перепишу когда нибудь, но там одновременно хранится не больше трех пользователей, пока так оставлю (что временно то постоянно =) )