限制和抵消多对多关系

时间:2016-04-16 17:00:15

标签: php mysql sql-server

我在我的数据库中得到了堆栈,我的问题是我有3个表,2个有多对多的关系,另一个是从2个表中生成。

我希望分页跟随1个表,它意味着2个表父,我想分页跟随2个表父项行中的1个

示例

表客户:

  

ID名称电子邮件

     

1 Peter peter@gmail.com

     

2 Jonh john@gmai.com

     

3 Sara sara@gmail.com

     

4 Tom tom@gmail.com

     

5 Jet jet@gmail.com

2个表产品

  

ID -----产品名称
  1 -----洗发水
  2 -----古柯   3 -----热狗
  4 ----- Kit kat
  5 -----奶酪
  6 -----意大利面   7 -----巧克力
  8 -----花生酱
  9 -----汉堡包   10 -----三明治

表CustomerBuyProduct

ID CusID   ProductID
1    1        1
2    1        3
3    1        4
4    2        1 
5    2        10
6    3        4
7    3        10
8    3         2
9    3         6
10   3         5
11   3         3
12   4         1
13   5         1

我的问题是,当我选择并离开连接3个表时,它们将向我显示11行,是的,因为我想从三个表中获取所有行 但我希望分页跟随客户表,它意味着在第1页只有3行或5行它将显示客户表中的总客户和他们购买的产品看起来像

总计:3行

 No.      Customer Name             Bought Product
                                            Shampoo
    1        Peter                          Coca
                                            Hotdog

    2       Jonh                           Shampoo
                                           Sandwich

                                           Kitkat
                                           Sandwich
    3       Sara                           Coca
                                           Cheese
                                           Hotdog

                         Page 1/2

总计:2行

    4      Tom                           Shampoo

    5      Jet                           Shampoo

但我不知道为这种情况做出选择陈述 有人可以帮帮我吗? 非常感谢你

1 个答案:

答案 0 :(得分:0)

尝试将GROUP_CONCATGROUP BY Customer.ID子句一起使用。

SELECT 
    Customer.ID, Customer.Name, GROUP_CONCAT(products.Name SEPARATOR ' ') 
FROM
    Customer LEFT JOIN
    CustomerBuyProduct ON CusID = Customer.ID LEFT JOIN
    products ON ProductID = products.ID
GROUP BY
    Customer.ID

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat