Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跨多个表使用foreach_Php - Fatal编程技术网

Php 跨多个表使用foreach

Php 跨多个表使用foreach,php,Php,因此,我有一个名为customers的数据库表。他们购买的最后6种产品存储在客户表中p1、p2、p3、p4、p5和p6下。然后将产品存储为产品编号,例如 Last Purchased: p1: 12355 p2: 55142 p3: 51251 等等。这些产品在products表中都有自己的表行。在那张单子上,除其他价格外,还有其他价格。现在,我想做的是一个简单的方法,从最近6次购买中提取最大的购买量。使用“最大值”可以轻松获得最大值 命令,我可以做一些像整个 $p1 = $

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

Last Purchased:
   p1: 12355
   p2: 55142
   p3: 51251
等等。这些产品在products表中都有自己的表行。在那张单子上,除其他价格外,还有其他价格。现在,我想做的是一个简单的方法,从最近6次购买中提取最大的购买量。使用“最大值”可以轻松获得最大值 命令,我可以做一些像整个

$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);
    }
}

您可以做的是将所有项放入一个数组,然后对其进行内爆,使其使用单引号,然后执行如下查询:

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

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

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

发布您的表结构尝试过:如果它不是您所想的,将做其他事情:不,不,您的数据库模式不好。你不应该像那样储存最新的6种产品。您需要一个表来存储所有购买信息,至少存储以下列:客户id、产品id、数量和时间戳,然后使用所需的约束编写一个联接order by和limit 6 are your friendsUhm。这只会导致数据库提供程序出错。我在foreach循环中添加了给我带来问题的部分。不知道是数据库提供商还是其他什么?@HaraldOve你制作了3个表吗?是的。创建了3个表,但不好:/Get这是来自数据库提供程序的foreach错误。。。