【问题标题】:How to export some rows of a MySQL table from a WHERE clause?如何从 WHERE 子句中导出 MySQL 表的某些行?
【发布时间】:2013-02-23 14:26:52
【问题描述】:

如何使用 PHP 脚本中的 where 子句导出 MySQL 表的某些行?

我有一个 MySQL say 测试,我想使用 PHP 脚本为 id 介于 10 和 100 之间的行创建一个可导入的 .sql 文件。

我想创建一个 sql 文件说 test.sql 可以导入 MySQL 数据库。

我的代码:

$con=mysqli_connect("localhost", "root","","mydatabase");

$tableName  = 'test';
$backupFile = '/opt/lampp/htdocs/practices/phpTest/test.sql';
$query      = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName WHERE id BETWEEN 10 AND 500";

$result = mysqli_query($con,$query);

这会创建一个 test.sql 文件,但是当我尝试导入时,它会给出错误 #1064。
我的脚本只创建一个包含列名和表结构或插入查询的行的文件。

【问题讨论】:

  • 绝对有必要从 php 中做到这一点吗?是否可以使用mysqldump
  • 除非您想自己构建插入语句,否则我认为这是不可能的。
  • 你可以执行到 mysqldump 虽然

标签: php mysql phpmyadmin


【解决方案1】:

如 cmets 中所述,您可以通过以下方式使用 mysqldump。

mysqldump --user=... --password=... --host=... DB_NAME --where=<YOUR CLAUSE> > /path/to/output/file.sql

如果你想让它出现在你的 php 文件中,你可以执行以下操作

exec('mysqldump --user=... --password=... --host=... DB_NAME --where=<YOUR CLAUSE> > /path/to/output/file.sql');

【讨论】:

  • exec('mysqldump --user=root --password= --host=localhost mytest test --where= > /opt/lampp/htdocs/practices/ phpTest/test.sql');我不工作。我写对了吗。如果我错了,请纠正我。
  • exec('mysqldump --user=root --password= --host=localhost mytest test --where="id BETWEEN 10 AND 500" > /opt/lampp/htdocs/practices/phpTest /test.sql');
  • 它会创建一个黑色文件。文件中没有任何内容。
  • 你能检查一下WHERE CLAUSE中的查询吗,下面的链接将引导你通过electrictoolbox.com/mysqldump-selectively-dump-datait-iss.com/mysql/mysql-mysqldump-where-clause
  • 它适用于我发布的一个示例,但如果我在下面使用则不起作用: exec('mysqldump -t --user=root --password= --host=localhost mytest test --where ="id IN (SELECT st_id from state WHERE std_id BETWEEN 145000 AND 150769) " > /opt/lampp/htdocs/practices/phpTest/fb_posts.sql');
【解决方案2】:

如果您使用 OUTFILE 导出数据,则必须使用 INFILE COMMAND 导入它

$con=mysqli_connect("localhost", "root","","mydatabase");

$tableName  = 'test';
$backupFile = '/opt/lampp/htdocs/practices/phpTest/test.sql';
$query      = "LOAD DATA INFILE '$backupFile' INTO TABLE $tableName";

$result = mysqli_query($con,$query);

或者您可以使用

制作 csv 文件
 $con=mysqli_connect("localhost", "root","","mydatabase");
 $tableName  = 'test';
 $backupFile = '/opt/lampp/htdocs/practices/phpTest/test.sql';
 $query      = 'SELECT * INTO OUTFILE '."'$backupFile'".'
                FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '.'\'"\'
                LINES TERMINATED BY \'\n\'
                FROM '.$tableName.' WHERE id BETWEEN 10 AND 500';

 $result = mysqli_query($con,$query);

然后导入这个文件。

希望这行得通...

【讨论】:

  • 我不想从 php 加载。我想使用 phpmyadmin 加载但从 php 导出
  • $query = 'SELECT * INTO OUTFILE'。 $备份文件。由'终止的字段。 ','。可选地由'封闭。 '"'. 'LINES TERMINATED BY'. '\n'. 'FROM '.$tableName.' WHERE id BETWEEN 10 AND 500'; 但它什么也没创造。
  • 我已经编辑了查询...请重新检查并确保您使用的是正确的路径..我已经使用它并且它运行良好...
  • 检查文件夹 /opt/lampp/htdocs/practices/phpTest 中的正确权限
【解决方案3】:

以非常简单的方式转到您的 phpMyAdmin 选择您要导出其特定行的数据库 单击“SQL”(在数据库上运行 SQL 查询/查询) 编写sql查询并执行 就像 select * from test table limit 500 现在有什么结果 就在底部看到“查询结果操作” 只需点击导出

全部完成:-)

【讨论】:

  • 太完美了!不知道——或者至少忘记了这种可能性。这是使用 phpmyadmin 时最简单的方法!
  • 这是最简单的解决方案
  • 我找不到“查询结果操作”按钮。注意:我有 v4.2.1。
  • “查询结果操作”是在phpmyadmin中运行任何查询时的一个部分,在查询结果下方可以看到查询结果操作:打印视图导出
  • 但是,当您使用联接时,这不允许您以 sql 格式导出数据!
【解决方案4】:

Mysql Shell 命令

mysqldump -u user -p password -h host Database Table --where="Condition"> /path/exportFile.sql

例子

mysqldump -u user -p 123456 -h host Database Student --where="age > 10"> /path/exportFile.sql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多