php - 我可以在 mysqldump 中使用查询吗?

标签 php sqlite mysql

我的远程服务器上有一个 Mysql 数据库,其中包含多个表。我需要使用 PHP 将其中一些表及其一些行获取到使用 SQLite 的本地 WPF 程序。

我需要从每个表获取的行取决于每个表的一些不同值(我的意思是我必须对每个表应用不同的 WHERE 子句),并且我需要能够使用标准 MySQL 操作(例如 LEFT JOIN 、UNION 等)。

到目前为止,我只能转储 1 个带有 1 个 WHERE 子句的表:

exec('./mysql2sqlite.sh --databases test -u test -pTest --tables users --where "a="' . $a . '" AND b="' . $b . ' | sqlite3 db/file.sqlite');

我认为我需要的是能够执行多个查询,然后将所有结果转储到 mysqldump 中,这可能吗?

另外,这是解决此类问题的正确方法吗?或者我应该先转储所需表的格式,然后转储所需行?

PD:我正在使用这个MySQL2SQLite转换器。

最佳答案

我将通过创建一个名为 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

如果表很大,您也可以使用 View ,但您需要修补mysqldump,因为它将 View 转储为 View ,而不是表。寻找

if (strcmp(table_type, "VIEW") == 0)
    DBUG_VOID_RETURN;

在MySQL源码中的client/mysqldump.c中,将其注释掉并重新编译。您将在 client/ 目录中找到 mysqldump 的新二进制文件,您只需将其复制到其他名称的某个目录中,而无需完全安装。这个黑客应该可以工作,尽管我还没有验证它 - 当我验证时我会发布更新。

更新 - 上述 mysqldump 的 hack 确实适用于 View - 我在 5.5.35 上测试了它,但它应该与较新的 5.5 和可能的 5.6/5.7 版本相同。修补后,您确实需要为其提供 -t 参数以获取具有定义的表数据。因此,您将首先执行 mysqldump --no-data real_db 来获取定义,然后执行 mysqldump -t tmp_backup 来获取 View 数据。然后,您可以使用 mysql 实用程序按顺序加载(首先是定义,然后是数据)。

关于php - 我可以在 mysqldump 中使用查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187947/

相关文章:

php - SQL where 子句给出空结果

php - 如何在网络中实现类似谷歌地图的缩放和平移系统?

php - 在 Slim Framework 中定义 MySQL 连接?

ios - 为什么我的 sqlite 文件在安装到 iOS 应用程序时没有数据?

c# - 在 Azure 中设置 MySQL 后端以进行 Xamarin 离线同步

php - 删除mysql数据库中的n行表

php - 如何将访问 token 附加到 Google 日历 API 请求

ios - SQL 查询由于某种原因不工作

android - 如何在 Android 服务中使用 SQLite?

mysql - SQL语句: How do I get the highest rating and the product for each location?