Cron Bash - 从两个MySQL表中选择数据&导出为CSV

时间:2013-09-13 21:51:25

标签: mysql bash cron export-to-csv

我非常擅长创建MySQL查询并需要一些帮助。我需要创建一个由cron作业每周一次触发的bash文件 - 查询两个表,抓取两个表中用户ID匹配的数据,并将选择数据添加到CSV导出文件。我希望CSV以逗号分隔。现在最好的我可以将它分开。

我在运行此查询时遇到的问题是我的语法(我知道这是错误的,因为我只是在网上从各种文章中窃取了片段)。我确实让每个数据库查询分开工作(从一个表中获取一个查询,另一个表中另一个查询)。现在我需要将它们组合起来只抓取我需要的数据。

这是我当前(非工作)的查询:

#!/bin/bash
mysql -u USERNAME --password=PASSWORD --database=xxxx_DBNAME --execute='SELECT `xxxx_videotraining_user.user_id`, `xxxx_videotraining_user.training_title`, `xxxx_videotraining_user.status`, `xxxx_users.id`, `xxxx_users.name`, `xxxx_users.user_employer`, `xxxx_users.user_ss_number` WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND `xxxx_videotraining_user.status` = "Completed" AND `xxxx_users.user_ss_number` > "1" ORDER BY `xxxx_videotraining_user.user_id` LIMIT 0, 10000 AND ' -C > /home/xxxx/subs/vtc/DB_EXPORTS/xxxx_videotraining_completed.csv

我认为你可以在这里看到我想要完成的任何事情 - 非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我认为AND不应该在这里:

LIMIT 0, 10000 AND

答案 1 :(得分:0)

看起来你似乎错过了你的FROM子句,有一个尾随的AND子句(如其他答案所述),并且引用的内容不正确。这看起来像是您的原始查询:

SELECT `xxxx_videotraining_user.user_id`, 
       `xxxx_videotraining_user.training_title`, 
       `xxxx_videotraining_user.status`, 
       `xxxx_users.id`, 
       `xxxx_users.name`, 
       `xxxx_users.user_employer`, 
       `xxxx_users.user_ss_number` 
 WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND 
       `xxxx_videotraining_user.status` = "Completed" AND 
       `xxxx_users.user_ss_number` > "1" 
ORDER BY `xxxx_videotraining_user.user_id` 
LIMIT 0, 10000 AND 

我认为你想要添加FROM子句,分别引用表和字段,并删除尾随的AND,得到类似的东西:

    SELECT `xxxx_videotraining_user`.`user_id`, 
       `xxxx_videotraining_user`.`training_title`, 
       `xxxx_videotraining_user`.`status`, 
       `xxxx_users`.`id`, 
       `xxxx_users`.`name`, 
       `xxxx_users`.`user_employer`, 
       `xxxx_users`.`user_ss_number` 
  FROM `xxxx_users`,
       `xxxx_videotraining_user`
 WHERE `xxxx_videotraining_user`.`user_id` = `xxxx_users`.`id` AND 
       `xxxx_videotraining_user`.`status` = "Completed" AND 
       `xxxx_users`.`user_ss_number` > "1" 
ORDER BY `xxxx_videotraining_user`.`user_id` 
LIMIT 0, 10000

还可以采取其他措施来缩短查询的大小并使其更清晰,但这应该可以使其正常运行。

我知道在处理长查询时帮助我的一件事就是像这样格式化它们,将主句分开,这样你就可以看到查询的不同部分。

如果有帮助,请告诉我。