shenhaibb_ 2020-04-27 12:42 采纳率: 0%
浏览 1553

订单表和商品表的数据库表关系应该是怎样的

我最近创建了一个订单表和商品表直接的关系 中间用一张关系表来联系

select o.order_id,o.order_num,o.order_time,
case when order_status=-1 then '交易关闭'
when order_status=0 then '已支付'
when order_status=1 then '已发货'
when order_status=2 then '交易完成'
end as order_status,
oi.orderitem_pro_num,
group_concat(p.product_id),
group_concat(p.product_name),
group_concat(p.product_price),
group_concat(p.product_pic),
u.user_username,u.user_address,u.user_telephone
from order_ o
left outer join orderitem oi on o.order_id=oi.order_id
left outer join user u on o.user_id=u.user_id 
left outer join product p on oi.product_id=p.product_id
group by order_id
order by order_id desc

并且我用这个语句也查询出了我的订单的信息,订购人的信息和商品的信息,并且用聚合函数把商品的信息合到一起了
图片说明
但是test测试的时候 product却是null 因为聚合函数里面的数据我不知道怎么分离导致里面的商品取不出来
图片说明
但是我不用聚合函数的话,比如说我一个订单里有3件商品 数据库就创建了三条记录,
我是有一个分页的效果的 我每页分5条记录 但是这一个订单就占了3条记录
这种情况怎么解决!
下面是我的测试代码

@Test
    public void testFindAllOrder(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        OrderService orderService = (OrderService) ac.getBean("orderService");
        List<Order> orderList = orderService.findAll();
        for (Order order : orderList) {
            System.out.println("-------------每个订单的信息-----------------");
            System.out.println(order);
            List<OrderItem> orderItems = order.getOrderItems();
            for (OrderItem orderItem : orderItems) {
                System.out.println(orderItem);
            }
            System.out.println(order.getUser());
        }
    }

就像下面这样 本来应该是5条订单 但是显示除了6条数据 导致我 分页失败
图片说明

  • 写回答

1条回答 默认 最新

  • _Onelone丶 2020-04-28 09:57
    关注

    查出的数据作为一个临时表进行分页,建立一个vo类,把展示的字段进行映射。

    评论

报告相同问题?