Установить столбцы и значения в операторе mysql из массива

0

Можно ли установить столбцы и значения в запросе mysql равным набору массивов, которые могут изменять размер и контент? Я думал об использовании цикла, но я понял, что могу понять, как фраза

mysql -u$user -p$password -h$host $database<<EOFMYSQL 
INSERT INTO customers (${ArrayA[0]}, ${ArrayA[1]}, ${ArrayA[2]}, ${ArrayA[3]})
VALUES ('${Array2[0]}' , '${ArrayB[1]}' , '${ArrayB[2]}' , '${ArrayB[3]}')
EOFMYSQL

Идея цикла

mysql -u$user -p$password -h$host $database<<EOFMYSQL 
for (( c=0; c<=${#ArrayA[@]}; c++ ))
do
echo $c
INSERT INTO Customers (${ArrayA[$c]})
VALUES ('${ArrayB[$c]}')
done
EOFMYSQL

Какие-либо предложения?

  • 0
    мог бы быть способ, но не проще ли было бы написать простой скрипт на любом из языков, который позволил бы вам легко справиться с этим?
Теги:
arrays
loops

1 ответ

0

Вы можете попробовать что-то подобное для работы с массивами в bash...

fields=(field1 field2 field3)
vals=("val1" "val2" "val3")

nvals=()
# need to add the single quotes around the values
for v in "${vals[@]}"; do nvals+=("'$v'"); done
# keep the old value of IFS so we can reset it.  Of course, if this is
# being done in a script this may not be necessary.
oldifs=$IFS
# set bash word separator to a comma so that is included in the expansions
IFS=','
into="${fields[*]}"
values="${nvals[*]}"
echo "$into"
echo "$values"
IFS=$oldifs
# this is just to show the expansion with the original IFS
into="${fields[*]}"
echo "back to regular IFS:"
echo "$into"

результаты, достижения:

field1,field2,field3 'val1','val2','val3' back to regular IFS: field1 field2 field3

Расширение массива с помощью [*] принимает только первый символ переменной IFS (стандартная переменная bash, используемая для разделения слов), поэтому я не смог добавить никаких пробелов, чтобы сделать ее более читаемой. Конечно, в настоящее время игнорируются поля, содержащие нестандартные символы и значения со встроенными одинарными кавычками.

Я также обнаружил, что мне нужно было установить расширение на переменную (в и значения), чтобы правильно получить расширение, я не мог просто откликнуть на массивы, например

echo "${into[*]}"

Ещё вопросы

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