PHP循环和MySQL逻辑: how to?

标签 php mysql

我无法找到一种使用 php/mysql 在数据库中注册大量数据的有效方法。

我有一个电话号码列表,它存储在号码表中。

PHONE_ID       |      PHONE_NUMBER      |     COUNTRY_ID
                        varchar

还有一个将电话号码与“联系人列表组”链接起来的表格。我们假设它的名称是 link_phonegroup。 对于每个电话/组链接,我都有一个参数列表。

GROUP_ID       |      PHONE_ID          |     PARAMETERS_LIST
                                                   varchar

我的脚本应该能够在给定 group_id 的情况下计算数百万个数字,并且:

  • 检索与号码关联的 number_id 或插入号码(如果不存在)(并返回 insert_id)
  • 更新与该组/号码对关联的parameters_list,如果该对不存在,则将其插入

目前,我循环 (foreach) 我的数字,并且 foreach 数字:

  • 从号码中选择 PHONE_ID,其中 PHONE_NUMBER = '$number'
  • 如果它不存在,我INSERT INTO ...并使用mysql_insert_id()检索这个新创建的id
  • 然后,利用此 ID,我从 link_phonegroup WHERE GROUPE_ID = $group_id AND PHONE_ID = $phone_id 中选择 PARAMETERS_LIST
  • 如果确实存在,我就会更新我的参数列表,如果不存在,我就会INSERT在我的link_phonegroup中添加一个新行表。

正如您想象的那样,我的问题是,对于我的 X 百万个数字中的每一个,我将触发 4 个查询。这是缓慢、低效且可怕的。

我了解了 INSERT INTO ON DUPLICATE KEY 技术 ( MySQL manual page )。我的测试非常慢,我放弃了。

我了解了 UPDATE CASE WHEN 技术 ( Example )。

基本上,我当前的目标是每个 200 左右的循环触发一个查询(这里 200 是一个随机数,我将使用其他值进行一些测试),这将 insert/update/retrieveid/insert_into_this_other_table/make_me_a_sandwich/and_dont_forget_coffee,用几句话来完成所有工作,这 - 我希望! - 对于数据库来说将是一种更快且压力更小的方法。

这是好方法吗?这是最好的方法吗? 如果是的话,这个死亡机甲的骨架会是什么?我不知道如何在插入或更新参数列表的同一请求中插入或检索电话 ID,因为在数百个其他类似请求的同一请求中给出了此电话 ID? 这可能吗?

我希望你理解我的神经已经放弃了很长一段时间。 我将很高兴并感谢您能给我的任何帮助。

谢谢。

最佳答案

您想要的可以通过存储过程来完成。我将首先向您介绍一些资源——因为您似乎已经对 MySQL 有所了解,因此学习存储过程如何工作并自己编写代码可能对您有好处,而不是让其他人直接向您提供存储过程。

http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5--net-17843

http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

关于PHP循环和MySQL逻辑: how to?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539367/

相关文章:

php - C2DM应用服务器解决方案

php - 有没有办法防止表透视/映射中出现重复条目​​?

php - 允许在社交媒体上共享受密码保护的页面?

mysql根据字段值自定义用户权限

php - 为什么 simple_html_dom 不能处理存储在数据库中的 html?

PHP foreach重复循环问题

php - 为数据库中的每个 ID 维护一个字符串队列

php - 如何将Android与PHP和MySQL连接?

php - mysql 查询优化

mysql - 如何统计where子句的结果以计算MYSQL select子句的比例?