【问题标题】:Avoiding query in loop - specific case避免循环查询 - 特定情况
【发布时间】:2013-12-05 06:57:17
【问题描述】:

我目前处于无法避免for 循环内的SELECT 查询的位置,因此我在这里问。

情况是这样的:我正在创建一个电子商务系统,它实现了 Paypal 购物车系统。用户付款后,IPN 响应如下所示(缩短):

Array 
(
    [mc_gross] => 8.98
    [address_status] => confirmed
    [item_number1] => item_49
    [tax] => 0.00
    [item_number2] => item_16
    [num_cart_items] => 2
    [address_state] => CA
    [item_name1] => Tractor
    [item_name2] => Elegy
    [quantity1] => 1
    [quantity2] => 1
    [txn_type] => cart
    [mc_gross_1] => 5.99
    [mc_currency] => USD
    [mc_gross_2] => 2.99
    [residence_country] => US
    [test_ipn] => 1
    [payment_gross] => 8.98
)

如您所见,有一些键表示somethingN。这就是麻烦的开始。

我使用num_cart_items 作为我必须执行的迭代次数,例如:

for ($i = 1; $i <= $_POST['cart_num_items']; $i++)
{
    // Do something
}

很明显,现在在这个循环中,我可以访问末尾有N 的每个购物车项目。而我需要的是验证售出的产品是否有欺诈行为。

我必须从 我的数据库 中的 item_numberN 中选择商品编号的价格,并将其与从 Paypal 的回复中收到的价格进行比较。

据我所知,这个选择语句必须发生在这个循环中。

有没有办法避免这种情况?

【问题讨论】:

  • 我不擅长 PHP,但你不能简单地在 SQL 中进行查询,比如 SELECT item_price FROM products WHERE id = item_number1 OR id = item_number2.... OR id = item_numberX 等?这至少会给你一个 SQL 查询,而不是一个庞大的 for 循环。
  • 如果有人买了120件怎么办?
  • 没有理由它不适用于 120 件商品。它比以下效率高得多:1)打开与 DB 的连接 2)发送非常小的查询 3)等待响应 4)接收小查询的数据 5)关闭连接 x120 次
  • 请给我一个包含 120 个购物车项目的演示,我想看看。

标签: php mysql sql loops paypal


【解决方案1】:

为避免在 for 循环中查询,您必须从 ipn 响应中收集所有 item_numbers。然后,使用这些item_numbers 生成带有IN 语句的查询。例如:

SELECT * FROM `items` WHERE `item_number` IN ('item_49', 'item_16')

【讨论】:

  • 感谢您的精彩提醒!这就是你在编程中休息时得到的结果。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多