MySQL bash - SQL 查询输出到变量

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17774405/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 18:15:35  来源:igfitidea点击:

bash - SQL Query Outputs to variable

mysqlsqlbashshellvariables

提问by mostworld77

Im new in bash scripting. I want to save sql-query outputs in variable, but

我是 bash 脚本的新手。我想将 sql-query 输出保存在变量中,但是

actually I must connect for every query to mysql with:

实际上,我必须使用以下命令将每个查询连接到 mysql:

mysql -u $MYUSER -p$MYPASS -D database

and want to save every output in seperatly variable

并希望将每个输出保存在单独的变量中

sample query is: SELECT domain FROM domains WHERE user='$USER'

示例查询是: SELECT domain FROM domains WHERE user='$USER'

to

$variable1 = FIRST_OUTPUT
$variable2 = 2ND_OUTPUT

thank you

谢谢你

回答by Yang

Taken from bash script - select from database into variable, you can read the query result into a variable.

取自bash 脚本 - select from database into variable,可以将查询结果读入变量中。

Example

例子

mysql> SELECT * FROM domains;
+-------+---------+
| user  | domain  |
+-------+---------+
| user1 | domain1 |
| user2 | domain2 |
| user3 | domain3 |
+-------+---------+

Usage

用法

$ myvar=$(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ echo $myvar
domain1 domain2 domain3

echois the bash command for output. You can then split $myvarinto separate variables:

echo是用于输出的 bash 命令。然后,您可以拆分$myvar为单独的变量

$ read var1 var2 var3 <<< $myvar
$ echo $var1
domain1
$ echo $var2
domain2

You can combine these two commands into a single one:

您可以将这两个命令合并为一个:

read var1 var2 var3 <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")

It is possible to store the results into arrays (useful if you don't know how many records there):

可以将结果存储到数组中(如果您不知道那里有多少条记录,则很有用):

$ read -ra vars <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ for i in "${vars[@]}"; do
$     echo $i
$ done
domain1
domain2
domain3

回答by 3kstc

Another way of doing is:

另一种做法是:

dbquery=`mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains"`      
dbquery_array=( $( for i in $dbquery ; do echo $i ; done ) )

The first line stores all the output from the query in a varriable dbqueryin a array-like-way. The second line converts the dbqueryinto an array dbquery_arraywith a simple forloop.

第一行dbquery以类似数组的方式将查询的所有输出存储在一个变量中。第二行使用简单的循环将 转换dbquery为数组。dbquery_arrayfor

回答by Jorge Magos

I did this

我做了这个

variable=mysql -u root -ppassworrd database << EOF select MAX(variable) AS a from table where variable2 = 'SOMETEXT' AND day(datevalue) >= 22; EOF

变量=mysql -u root -ppassworrd database << EOF select MAX(variable) AS a from table where variable2 = 'SOMETEXT' AND day(datevalue) >= 22; EOF

I hope it helps

我希望它有帮助