PHP MySQL库存相似百分比

时间:2011-10-06 07:31:55

标签: php mysql

编辑:

我删除了令人困惑的东西,我想简化我想要完成的事情:

让我们说John有2个篮子,其中1个包含 1 stone 2个弹珠 2个棍子,另一个包含 2颗石头 2支

Eric有1个篮子,其中包含 3瓶 2瓶 1石

同时杰克有一个包含 1棒的篮子。另外,杰克在某个地方一块石头但是它还没有进入他的篮子里。

出于此查询的目的,我们假设我们专注于杰克的项目。因此,我们会检查每个人的篮子,看看哪个篮子与他总体上的所有物品几乎相同(a)而不考虑Jack的物品是否在篮子里面,(b)只与Jack的物品相比较在别人的篮子里面,不在外面。

这将是一个理想的最终结果,当搜索哪个篮子杰克可以匹配最简单的所有项目,无论他的项目目前在哪里:

事实:

  • 杰克总共 1棒 1石

结果:

  • 第一名:John的第二个篮子包含 2个宝石 2支
  • 第二名:约翰的第一个篮子包含 1石头 2弹珠 2支
  • 第3名:Eric的篮子包含 3瓶 2瓶 1石

2 个答案:

答案 0 :(得分:2)

这将按照你要求的单一篮子来做:

SELECT SUM(item.qty/(SELECT sum(qty) total FROM basket WHERE bid = xxx)
       * 1/all_item.qty) likeness, basket.bid, all_basket.bid all_bid
FROM basket JOIN item USING (bid)
     LEFT JOIN
     (basket all_basket JOIN item all_item USING (bid))
     USING (iid)
WHERE basket.bid = xxx
GROUP BY basket.bid, all_basket.bid
ORDER BY likeness DESC

可能可以将此连接到users表以立即执行所有篮子。然后将其包装在另一个查询中以找到最佳匹配。

首先尝试一下,让我知道它是否有效。如果确实如此,我明天是否能做到这一点。

答案 1 :(得分:0)

虽然我不确定使用SQL计算篮子相似度的简单方法,但我认为您只是在尝试提供产品推荐。

您可以根据当前购物篮制定查询以生成产品推荐。您可以通过以下方式执行此操作:

  1. 查找任何包含当前客户购物篮中至少一件商品的购物篮。
  2. 将结果限制为同一类别的产品。
  3. 您可以使用以下查询获取相应的信息:

    SELECT b1.basket_id, b1.product_id, b1.quantity, p1.product_category FROM baskets b1
        INNER JOIN products p1 ON p1.product_id = b1.product_id
        WHERE b1.product_id IN
        (
            SELECT b2.product_id FROM baskets b2
                INNER JOIN products p2 ON p2.product_id = b2.product_id
                WHERE b2.basket_id = $basket
                AND p2.product_category = p1.product_category
        )
        AND b1.basket_id != $basket;
    

    这将返回与您选择的购物篮共享至少一个产品的所有其他购物篮中所有商品的购物篮ID,产品ID,数量和产品类别ID。它还会过滤结果,以便建议的产品始终与源产品属于同一类别。

    以下是一个示例:

    baskets table:
    basket_id | product_id | quantity
    1,          2,           1
    1,          1,           2
    1,          3,           5
    2,          5,           1
    2,          6,           1
    3,          1,           1
    3,          2,           1
    3,          4,           1
    
    products table:
    product_id | product_name | product_price | product_category
    1,           'cat1 prod1',  14,             1
    2,           'cat1 prod2',  1.5             1
    3,           'cat1 prod3',  2,              1
    4,           'cat2 prod1',  22,             2
    5,           'cat2 prod2',  6,              2
    6,           'cat2 prod3',  45,             2
    7,           'cat3 prod1',  24,             3
    8,           'cat3 prod2',  55.4,           3
    9,           'cat3 prod3',  22,             3
    
    result of query:
    basket_id | product_id | quantity | product_category
    3,          1,           1,         1
    3,          2,           1,         1
    

    希望这对你有用。