在多个表中使用foreach

时间:2015-04-02 04:08:45

标签: php

所以,我有一个名为customers的数据库表。他们购买的最后6个产品存储在" p1,p2,p3,p4,p5和p6"下的客户表中。然后将产品存储为产品编号,例如

Last Purchased:
   p1: 12355
   p2: 55142
   p3: 51251

等。这些产品都拥有他们在"产品"表。在该列表中,其中包括"价格"。现在,我想做的是在过去的6次购买中提取最大购买量的一种简单方法。使用max()可以轻松获得最大的优势 命令,我可以做一些像整个

的事情
$p1 = $array[0]["p1"];
$array = $db->queryA("SELECT * FROM products WHERE product = $p1");

然后将它们与max($ p1,$ p2,$ p3)等进行比较。我的问题是需要花费大量的时间和代码。有没有更好的方法来做到这一点,例如使用foreach循环?我真的很抱歉,但我完全被踩了。再次..所有帮助表示赞赏。 :)

编辑:不确定如何显示表格结构,但这是我的尝试,对不起,如果它是坏的:(

customers            products
   id                      prod_nr     
   name                    name
   mail                    price
   member_since            quantity
   p1
   p2
   p3
   p4
   p5
   p6

这样就够了吗?这是一些更多的领域,但它是它的要点。此外," id"和" prod_nr"是初选

编辑nr2:还想解释一下,我想要运行这些6 *查询中的大约11个,以免让你觉得我只是浪费你的时间而不是我的一点点...... 。:)

再次编辑,这是数据库提供商的一部分,给我带来了问题......

    public function query($query)
{
    try{
        $query = trim($query);
        $sth = $this->pdo->query($query,PDO::FETCH_ASSOC);
        $result = null;
        foreach($sth as $row) {
            $result[] = $row;
        }
        return $result != null ? json_encode($result) : null;
    }
    catch(exception $e)
    {
        echo('Exception ' . $e);
    }
}

2 个答案:

答案 0 :(得分:0)

你可以做的是对数组的所有项目,然后内爆它使它使用单引号然后执行这样的查询:

$array = $db->queryA("SELECT * FROM products WHERE product IN($your_array)");

答案 1 :(得分:0)

首先,您需要重新设计数据库,您需要一个像这样的购买表

purchase
---------
id_purchase
id_customer
id_product

customers            
-----------
id                           
name                    
mail                    
member_since            

products
------------
prod_nr 
name
price
quantity

然后你的SQL将是:

SELECT * from customers JOIN purchase ON id = id_customer JOIN products ON prod_nr = id_product
ORDER BY DESC price
LIMIT 1