以逗号分隔格式输出多个MySql查询
我必须在一个表上运行多个查询,并以逗号分隔的格式获得输出。下面是我编写的脚本,但它逐行显示每个Mysql查询的输出以逗号分隔格式输出多个MySql查询,mysql,bash,awk,Mysql,Bash,Awk,我必须在一个表上运行多个查询,并以逗号分隔的格式获得输出。下面是我编写的脚本,但它逐行显示每个Mysql查询的输出 #!/bin/bash mysql -uuser -p7pas db -e "select number from hits_log where created_at between '2017-04-07 00:00:00' and '2017-04-08 00:00:00'| while read number; do mysql -uuser -ppas db -e "se
#!/bin/bash
mysql -uuser -p7pas db -e "select number from hits_log where created_at between '2017-04-07 00:00:00' and '2017-04-08 00:00:00'| while read number; do
mysql -uuser -ppas db -e "select number,count(1) as total_hits from hits_log where number='$number' and time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00' ; select count(1) as xxx from hits_log where number_type='some_value' and old_number='$number' and time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00';"
done
我得到的输出是
number total_hits
12345 4
xxxx
0
所需输出为
number total_hits xxxx
12345 4 0
你不需要这个循环。只需将这两个查询连接起来
mysql -e "
SELECT l1.number, COUNT(*) AS total_hits, IFNULL(l2.xxx, 0) AS xxx
FROM hits_log AS l1
LEFT JOIN (
SELECT old_number, COUNT(*) AS xxx
FROM hits_log
WHERE number_type='some_value'
AND time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00'
GROUP BY old_number) AS l2
ON l1.number = l2.old_number
WHERE time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00'
GROUP BY l1.number"
如果您确实需要在循环中查询单个$number
,您仍然可以将这两个查询合并到一行中
mysql -e "
select number,count(1) as total_hits, xxx
from hits_log
cross join (
select count(1) as xxx
from hits_log
where number_type='some_value'
and old_number='$number'
and time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00'
) as x
where number='$number'
and time between '2017-04-07 00:00:00' and '2017-04-08 00:00:00' ;"
请看,您应该将这些查询合并为一行。谢谢,但这里我发布的只是我正在尝试做的报告的一部分。我需要连接至少10个不同查询的值,以获得所需的输出。现在,我正在尝试将输出值存储到一个变量中,并以逗号分隔打印每个变量。非常感谢您的帮助和时间:)我添加了第二个查询,显示如何在循环中一次一个数字地执行此操作。太好了!谢谢