07.01.2017, 06:24
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от wadim
|
И знать могу ли я json_encode заменить на implode.
|
Строка массива чисел объединенный в строку через запятую равна json-строке массив чисел, за исключением крайних символов - [ и ]. Объединяйте на здоровье, легче то от этого не станет.
|
|
07.01.2017, 07:15
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
В mysql реализации есть замена по регулярному выражению. Я по крайней мере это сделал. Могу удалить 44 из строки 15,44,10, остается решить как удалить запятые - решу может быть. Данные хранятся так:
id qq arr
1 10 15,44,10
Происходит выборка при условии id = тому то.
Если я массив вынесу в отдельную таблицу, то мне придется в нее писать/удалять id, так как бывает нужно удалить полностью строку или создать строку в таблице, а это значит что придется со второй таблицей работать, в которую вынесем массив. К тому же удаление элемента в массиве-строке во второй таб, приведет к нулевым полям, вот так:
id1 id2 id3 ....................
15 12 16
0 13 0
10 0 0
Тоже хватит мароки. Есть ли есть другой вариант структуры - пишите, буду благодарен.
|
|
07.01.2017, 08:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
В mysql есть поиск по регулярному выражению, замены нет. А если вы такое обнаружили, заменяйте сразу с запятой, что мешает?
Про удаление и будет id равное 0, это конечно глупость.
PS. Есть оператор REPLACE(), на здоровье, заменяйте, но, если к примеру есть "11,24,2,15" и надо заменить 2 на 7, то замена этим оператором ",2" на ",7", вернет результат "11,74,7,15". Шаблон регулярного выражения да еще замену по этому шаблону сюда вставить нельзя.
Последний раз редактировалось laimas, 07.01.2017 в 08:34.
|
|
07.01.2017, 08:32
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
Мешает то что при удалении ,44, мы получим 1510 из 15,44,10. Вообще при удалении из поля mysql мы часто имеем 0 или я сам пишу туда 0, так как мне важно что я после прочту.
|
|
07.01.2017, 08:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Я вам уже все сказал, больше сказать нечего. И вообще, REGEXP в mysql, это не Perl RegEXP в РНР, это простейшее для поиска.
Хотите без проблем управлять данными, значит представляйте их в подобающей структуре. То что какие-то 0 при этом получаются, так это глупости от непонимания. )
Либо сложные изменения, а тем более по условию производите не средствами sql.
|
|
08.01.2017, 02:23
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
Если удаляем к примеру 44 хоть со строки, хоть с отдельного поля (поле =44) что остается? Ноль, или что напишешь, мне нужно чтобы программа при чтении нуля понимала, что данные равны нулю или сложнее - что данных нет. иначе не корректная работа проги будет.
|
|
08.01.2017, 05:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если удаляем запись в базе, то ничего там не остается.
То что вы пишите умом не понять. То что вы описываете есть индексный массив, и если использовать массив [1, 2, 3], в котором удален 2, то и бог с ним, нет и не надо. Но если это массив ['key_1'=>1, 'key_2'=>2,'key_3'=>3] и мы также работаем с его ключами, которые постоянны, то либо у ключа есть значение, либо null/0. То есть если переложить на базу, то ключи этого массива, есть нечто определенное в базе, а массив, это связанная по этим ключам таблица. Ключи этой таблицы (как и их значения) могут быть удалены только тогда, когда удаляется запись из основной таблицы по этому ключу.
У вас же индексный массив, и коли как-то по нему задается связь, то длина такого массива (пусть изначально и без значений) должна быть задана, а иначе как?
Я спрашивал что это за массив, связан ли он как-то с чем-то, чего мне не известно, а посему обо всех аспектах судить сложно.
|
|
18.01.2017, 18:25
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
У меня конкретный вопрос как из строки 15,44,10 путем sql запроса удалить 44, с ключами понятно, если я пишу 15,44,10 и в этой строке нет ключей, значит меня это устраивает, ключи получим при прочтении, мне не нужна связь ключей со значениями. Я удаляю значение, после сдвигаю ключи массива. Но все это и так понятно и работает, вопрос как sql запросом удалить значение со строки.
|
|
18.01.2017, 19:47
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от wadim
|
У меня конкретный вопрос как из строки 15,44,10 путем sql запроса удалить 44
|
Я уже рассказывал какие есть для этого в MySQL средства, и то, что держать данные в базе, которые подвергаются таким изменениям, в виде строки, это геморрой. Что еще добавить?
|
|
22.01.2017, 09:29
|
Профессор
|
|
Регистрация: 04.03.2015
Сообщений: 163
|
|
я брал строку, преобразовывал json_decode, менял как надо, обратно json_encode и снова запись, действительно расстраивает, что база насилуется, но никогда не слышал, что можно менять строку прямо в базе, удалил 44 и не знаешь как удалить ,44
можешь рассказать как ты удалил 44?
|
|
|
|