2015-10-12 5 views
-1

Я пытался обновить таблицу, в которой поданная, называемая «operatori», содержит набор чисел. Это пример. 2,4,4,4,4,4mysql: замена итерационных элементов на регулярные выражения

Что я хотел сделать, так это избавиться от нескольких итераций одного и того же элемента набора и получить более чистый, например: 2,4.

Я попытался с заменой 4,4,4,4,4 с 4, но это работает только тогда, когда у меня есть 5 итераций одного и того же элемента и только с номером 4.

Числа от 0 до 7 и итерации могут идти от 1 до N.

Я думаю, что регулярные выражения могут сделать трюк, но я, честно говоря, испытываю много трудностей в их понимании.

У вас есть подсказка?

+0

вы хотите обкорнать как массив с этим ?? –

+1

Если вы сохраняете список разделенных запятыми в реляционной базе данных, вы, вероятно, делаете что-то неправильно. –

+0

@MattJacob запрос состоял в том, чтобы иметь несколько данных в поле записи ringle. Я знаю, что это неправильно. Я решил иметь 2 разных таблицы, чем иметь представление с group_concat для отображения данных. Мне не удалось сделать мой путь. Вместо этого был выбран поданный набор. – Aptivus

ответ

1

попробовать это,

$str = "2,4,4,4,4,4"; 
$array = explode(",",$str); 
$array = array_unique($array); 
print_r($array); 

выход будет

Array 
(
    [0] => 2 
    [1] => 4 
) 
+0

Спасибо! Я думаю, что я продолжу с php + mysql согласно вашему намеку. Я полагаю, что у меня возникнут проблемы с объемом данных, потому что мне нужно пройти через 18 000 записей, а время выполнения php может закончиться до завершения обновления. – Aptivus

+0

18000 уникальных значений ?? –

+0

18000 уникальных записей, которые имеют столбец «operatori» как набор, как объяснялось ранее. – Aptivus

0

У вас, вероятно, неправильная структура данных для этой цели. Как правило, вам нужна таблица соединений с одной строкой на элемент, а не хранение элементов в списке.

Но, имея только 8 предметов, вы можете сделать следующее - если вам не все равно, как заказать.

select concat_ws(',', 
       (case when find_in_set('0', operatori) > 0 then '0' end), 
       (case when find_in_set('1', operatori) > 0 then '1' end), 
       (case when find_in_set('2', operatori) > 0 then '2' end), 
       (case when find_in_set('3', operatori) > 0 then '3' end), 
       (case when find_in_set('4', operatori) > 0 then '4' end), 
       (case when find_in_set('5', operatori) > 0 then '5' end), 
       (case when find_in_set('6', operatori) > 0 then '6' end), 
       (case when find_in_set('7', operatori) > 0 then '7' end) 
       ) 
. . . 

Эта логика также может быть использован в update заявлении.

+0

Спасибо Gordon – Aptivus

Смежные вопросы