Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以逗号分隔格式输出多个MySql查询_Mysql_Bash_Awk - Fatal编程技术网

以逗号分隔格式输出多个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

我必须在一个表上运行多个查询,并以逗号分隔的格式获得输出。下面是我编写的脚本,但它逐行显示每个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 "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个不同查询的值,以获得所需的输出。现在,我正在尝试将输出值存储到一个变量中,并以逗号分隔打印每个变量。非常感谢您的帮助和时间:)我添加了第二个查询,显示如何在循环中一次一个数字地执行此操作。太好了!谢谢