Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как записать массив в базу mysqli. (https://javascript.ru/forum/server/66707-kak-zapisat-massiv-v-bazu-mysqli.html)

laimas 07.01.2017 06:24

Цитата:

Сообщение от wadim
И знать могу ли я json_encode заменить на implode.

Строка массива чисел объединенный в строку через запятую равна json-строке массив чисел, за исключением крайних символов - [ и ]. Объединяйте на здоровье, легче то от этого не станет.

wadim 07.01.2017 07:15

В 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

Тоже хватит мароки. Есть ли есть другой вариант структуры - пишите, буду благодарен.

laimas 07.01.2017 08:02

В mysql есть поиск по регулярному выражению, замены нет. А если вы такое обнаружили, заменяйте сразу с запятой, что мешает?

Про удаление и будет id равное 0, это конечно глупость.

PS. Есть оператор REPLACE(), на здоровье, заменяйте, но, если к примеру есть "11,24,2,15" и надо заменить 2 на 7, то замена этим оператором ",2" на ",7", вернет результат "11,74,7,15". Шаблон регулярного выражения да еще замену по этому шаблону сюда вставить нельзя.

wadim 07.01.2017 08:32

Мешает то что при удалении ,44, мы получим 1510 из 15,44,10. Вообще при удалении из поля mysql мы часто имеем 0 или я сам пишу туда 0, так как мне важно что я после прочту.

laimas 07.01.2017 08:55

Я вам уже все сказал, больше сказать нечего. И вообще, REGEXP в mysql, это не Perl RegEXP в РНР, это простейшее для поиска.

Хотите без проблем управлять данными, значит представляйте их в подобающей структуре. То что какие-то 0 при этом получаются, так это глупости от непонимания. )

Либо сложные изменения, а тем более по условию производите не средствами sql.

wadim 08.01.2017 02:23

Если удаляем к примеру 44 хоть со строки, хоть с отдельного поля (поле =44) что остается? Ноль, или что напишешь, мне нужно чтобы программа при чтении нуля понимала, что данные равны нулю или сложнее - что данных нет. иначе не корректная работа проги будет.

laimas 08.01.2017 05:05

Если удаляем запись в базе, то ничего там не остается.

То что вы пишите умом не понять. То что вы описываете есть индексный массив, и если использовать массив [1, 2, 3], в котором удален 2, то и бог с ним, нет и не надо. Но если это массив ['key_1'=>1, 'key_2'=>2,'key_3'=>3] и мы также работаем с его ключами, которые постоянны, то либо у ключа есть значение, либо null/0. То есть если переложить на базу, то ключи этого массива, есть нечто определенное в базе, а массив, это связанная по этим ключам таблица. Ключи этой таблицы (как и их значения) могут быть удалены только тогда, когда удаляется запись из основной таблицы по этому ключу.

У вас же индексный массив, и коли как-то по нему задается связь, то длина такого массива (пусть изначально и без значений) должна быть задана, а иначе как?

Я спрашивал что это за массив, связан ли он как-то с чем-то, чего мне не известно, а посему обо всех аспектах судить сложно.

wadim 18.01.2017 18:25

У меня конкретный вопрос как из строки 15,44,10 путем sql запроса удалить 44, с ключами понятно, если я пишу 15,44,10 и в этой строке нет ключей, значит меня это устраивает, ключи получим при прочтении, мне не нужна связь ключей со значениями. Я удаляю значение, после сдвигаю ключи массива. Но все это и так понятно и работает, вопрос как sql запросом удалить значение со строки.

laimas 18.01.2017 19:47

Цитата:

Сообщение от wadim
У меня конкретный вопрос как из строки 15,44,10 путем sql запроса удалить 44

Я уже рассказывал какие есть для этого в MySQL средства, и то, что держать данные в базе, которые подвергаются таким изменениям, в виде строки, это геморрой. Что еще добавить?

psiklop 22.01.2017 09:29

я брал строку, преобразовывал json_decode, менял как надо, обратно json_encode и снова запись, действительно расстраивает, что база насилуется, но никогда не слышал, что можно менять строку прямо в базе, удалил 44 и не знаешь как удалить ,44
можешь рассказать как ты удалил 44?


Часовой пояс GMT +3, время: 15:44.