Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
使用PHP对表中的每一行运行MySQL查询_Php_Mysql - Fatal编程技术网

使用PHP对表中的每一行运行MySQL查询

使用PHP对表中的每一行运行MySQL查询,php,mysql,Php,Mysql,我的编程经验有限,几乎没有PHP编程经验。然而,我被赋予了一项任务,它需要的不仅仅是我的基本SQL技能/ 我有一个MySQL表(“用户”),其中包含334个不同的用户ID,还有一个表(“修订版”),其中包含对wiki站点所做的所有修订,以及提交每个修订版的用户ID 我想生成一个结果文件(以制表符分隔),其中包含“用户”表中每个用户的100个修订的随机样本,以及该用户的ID 我的SQL查询如下所示: select r.revision_id, r.revision_timestamp, r.use

我的编程经验有限,几乎没有PHP编程经验。然而,我被赋予了一项任务,它需要的不仅仅是我的基本SQL技能/

我有一个MySQL表(“用户”),其中包含334个不同的用户ID,还有一个表(“修订版”),其中包含对wiki站点所做的所有修订,以及提交每个修订版的用户ID

我想生成一个结果文件(以制表符分隔),其中包含“用户”表中每个用户的100个修订的随机样本,以及该用户的ID

我的SQL查询如下所示:

select r.revision_id, r.revision_timestamp, r.user_id from revision as r, users as u where r.user_id = u.user_id order by rand() limit 100;
正如目前所写的,这给了我一个随机分类的100个修订版,由“用户”表中的任何用户进行。我希望表中每个用户都有100个随机修订


我知道这可以用PHP完成,可能很容易,但我不知道语法。我如何才能做到这一点?

它必须是一个查询吗?如果不是,那么对用户列表进行初始查询,然后对每个用户进行查询就很简单了-每个用户的查询将与您当前的查询相同,只需添加
,其中u.user\u id=[user id from loop]
。就语法而言,任何基本的PHP mysql教程都应该为您提供足够的查询,然后查看fopen/fwrite/fclose以生成csv

总的伪代码看起来像:

$file = file open "filename.csv"
$queried_users = mysql query "select u.user_id from users u"

foreach $queried_users as $user
    $entries = mysql query "select r.revision_id, r.revision_timestamp, r.user_id from revision as r, users as u where r.user_id = u.user_id and where u.user_id = " . $user['user_id'] . " order by rand() limit 100;"
    foreach $entries as $entry
        file write to $file $entry['user_id'].','.$entry['revision_id'].','.$entry['revision_timestamp'].'\n';

file close $file

请注意,通过构建这样的字符串来组合查询是不安全的(通常最好使用参数化查询),但听起来这只是一个内部问题,因此您可能可以在这里侥幸逃脱。

很简单,但如果用户数量激增,这可能会很糟糕。感谢您的回复,Matt。我不太明白你在说什么。以下是我不太明白的:1)你是否建议我在MySQL中使用一些循环功能?2) 在这种情况下,初始查询是什么?我在users表中已经有一个用户列表,我希望每个用户都能随机编辑100次。3) [user id from loop]是实际命令还是伪代码。。。所以基本上,我什么都不懂,我想:)谢谢你的耐心。循环应该是PHP的。虽然您可能已经有了用户列表,但仅仅手动输入它将是一种糟糕的形式——不灵活。它已经在数据库中。因此,您只需执行一次查询即可获得用户列表。然后,您将对第一个查询的结果执行一个循环,为每个用户执行一个查询。这是伪代码——你可以在PHP中获取用户id,然后在PHP中构建查询(要么作为字符串,这很简单,但容易出现安全问题,要么使用参数化查询,这是正确的方法,但更复杂)。目前这完全是一项一次性任务。如果他们需要一个健壮的、可扩展的解决方案,他们会比我投入更大的力量。正如Dave所说,这不会有特别高的性能。当然,这不仅仅是使用order by rand()来完成的——这一功能相当慢。您可能不希望在实时网站上执行此操作,但对于定期报告生成来说应该没问题,我收集到的信息更符合csv输出要求。