我的远程服务器上有一个包含多个表的Mysql数据库。我需要使用PHP将这些表中的一些表用于使用SQLite的本地WPF程序。
我需要从每个表中获取的行取决于每个表的一些不同的值(我的意思是我必须对每个表应用不同的WHERE子句),并且我需要能够使用标准的MySQL操作(如LEFT JOIN) ,UNION等)。
到目前为止,我只能使用1个WHERE子句转储1个表:
get_update
我认为我需要的是能够执行多个查询然后将所有结果转储到mysqldump中,是否可能?
另外,这是解决此类问题的正确方法吗?或者我应该首先转储欲望表的格式然后转储所需的行?
PD:我正在使用这个MySQL2SQLite转换器。
答案 0 :(得分:0)
我会通过创建一个名为tmp_backup
之类的单独临时数据库来解决问题,创建将映射表但只包含所需行的表,然后执行该数据库的转储。临时数据库表的示例:
CREATE tmp_backup.customers LIKE real_db.customers;
SELECT c.* FROM real_db.customers c
LEFT JOIN real_db.bad_customers o USING(customer_id) WHERE o.customer_id IS NULL
如果表很大,您也可以使用视图,但是您需要修补mysqldump
,因为它会将视图转储为视图,而不是表。寻找
if (strcmp(table_type, "VIEW") == 0)
DBUG_VOID_RETURN;
在MySQL源代码的client/mysqldump.c
中,将其注释掉并重新编译。您将在mysqldump
目录中找到client/
的新二进制文件,您可以在没有完整安装的情况下以其他名称复制到某个目录中。这个hack应该可以工作,虽然我还没有验证它 - 我会发布更新。
更新 - mysqldump
的上述黑客确实可以使用视图 - 我在5.5.35上进行了测试,但它应该与更新的5.5和5.6 / 5.7版本一样。在补丁之后,您需要给它-t
参数来获取带有定义的表数据。因此,您将首先mysqldump --no-data real_db
获取定义,然后mysqldump -t tmp_backup
获取视图数据。然后,您可以使用mysql
实用程序加载顺序(先定义,然后是数据)。