2015-04-02 51 views
1

所以,我有一个名为customers的数据库表。他们购买的最后6种产品存储在客户表中“p1,p2,p3,p4,p5和p6”下。然后该产品将作为产品号存储,例如使用跨多个表的foreach

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:也想解释一下,我有大约11个这样的6 *查询我想运行,以免让你觉得我只是在浪费你的时间而不是我的一点点:) :)

再次编辑,在这里我S上的数据库提供给我的问题的一部分...

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); 
    } 
} 
+0

后想你的表结构 – 2015-04-02 04:15:48

+0

:)如果它不是你的想法:) – 2015-04-02 04:30:51

+0

有什么都会去做别的事情没有没有没有没有你的数据库模式是不好的。你不应该存储这样的最新6款产品。你需要一个表来存储所有的购买(至少是这些列:客户ID,产品ID,数量和时间戳),然后写入一个JOIN和所需的约束条件(并且限制6是你的朋友) – 2015-04-02 06:46:27

回答

0

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

$array = $db->queryA("SELECT * FROM products WHERE product IN($your_array)"); 
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 
+0

Uhm。这只会导致数据库提供者出错。我在foreach循环中添加了给我提出问题的段。不知道它是数据库提供者还是其他的东西? – 2015-04-02 06:23:37

+0

@Harald你做了3张桌子? – 2015-04-02 11:41:58

+0

是的。创建了3个表,但没有用:/从数据库提供程序获取foreach错误... – 2015-04-02 18:00:13