我的编程经验有限,而PHP几乎没有。但是我得到的任务需要的东西比我的基本SQL技能要多......:/
我有一个包含334个不同用户ID的MySQL表(“Users”)和另一个表(“Revisions”),其中包含对Wiki站点所做的所有修订,以及提交每个修订版的用户的ID 。
我想生成一个结果文件(制表符分隔),其中包含“Users”表中每个用户的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完成,可能很容易,但我不知道语法。我怎么能做到这一点?
答案 0 :(得分:2)
是否必须是单个查询?如果没有,那么对用户列表进行初始查询将是微不足道的,然后对每个用户进行查询 - 每个用户查询将与您当前的查询相同,并添加where u.user_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
请注意,通过构建类似的字符串来组装查询是不安全的(更好的是通常使用参数化查询),但听起来这只是内部事物,所以你可以在这里侥幸逃脱。