Mysql 具有相同表的leftJoin返回的记录比预期的多(查询生成器)

Mysql 具有相同表的leftJoin返回的记录比预期的多(查询生成器),mysql,query-builder,laravel-query-builder,Mysql,Query Builder,Laravel Query Builder,我创建了一个查询来获取数据以返回到视图 查询应返回8条记录,但应返回10条记录。一个订单被错误地复制了3次 我可以发现以下2个使用相同表的leftJoin导致了此错误: LefJoin: ->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID') ->leftJoin('users_r3_details AS users_2', 'orders_detail_

我创建了一个查询来获取数据以返回到视图

查询应返回8条记录,但应返回10条记录。一个订单被错误地复制了3次

我可以发现以下2个使用相同表的leftJoin导致了此错误:

LefJoin:

->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
'users_1.firstname AS FirstnameUser',
'users_1.lastname AS LastnameUser',
'users_2.firstname AS FirstnameCustomer',
'users_2.lastname AS LastnameCustomer',
# SQL : GET THE ORDER DATA

$orders                     = DB::table('orders_detail_new')
                                ->leftJoin('status_order','orders_detail_new.statusorderID', '=', 'status_order.id')
                                ->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
                                ->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
                                ->leftJoin('dessert_servings','orders_detail_new.dessertservingID', '=', 'dessert_servings.id')
                                ->leftJoin('product_types','orders_detail_new.producttype_ID', '=', 'product_types.producttypeID')
                                ->leftJoin('product_names','orders_detail_new.productname_ID', '=', 'product_names.productname_ID')
                                ->leftJoin('party_loaf_portions','orders_detail_new.ID_portion', '=', 'party_loaf_portions.portion_ID')
                                ->leftJoin('party_loaf_weights','orders_detail_new.partyloafweightID', '=', 'party_loaf_weights.id')
                                ->leftJoin('party_loaf_sandwiches_1','orders_detail_new.partyloafsandwich1ID', '=', 'party_loaf_sandwiches_1.id')
                                ->leftJoin('party_loaf_sandwiches_2','orders_detail_new.partyloafsandwich2ID', '=', 'party_loaf_sandwiches_2.id')
                                ->leftJoin('party_loaf_sandwiches_3','orders_detail_new.partyloafsandwich3ID', '=', 'party_loaf_sandwiches_3.id')
                                ->leftJoin('party_loaf_sandwiches_4','orders_detail_new.partyloafsandwich4ID', '=', 'party_loaf_sandwiches_4.id')
                                ->leftJoin('party_loaf_ribbons','orders_detail_new.partyloafribbonID', '=', 'party_loaf_ribbons.id')
                                ->leftJoin('savoury_canapes','orders_detail_new.canapeID', '=', 'savoury_canapes.id')
                                ->leftJoin('savoury_mini_puffs','orders_detail_new.minipuffID', '=', 'savoury_mini_puffs.id')
                                ->leftJoin('savoury_mini_vols_au_vent','orders_detail_new.minivolsauventID', '=', 'savoury_mini_vols_au_vent.id')
                                ->leftJoin('savoury_little_appetisers','orders_detail_new.littleappetiserID', '=', 'savoury_little_appetisers.id')
                                ->leftJoin('sweet_sweets','orders_detail_new.sweetID', '=', 'sweet_sweets.id')
                                ->select(
                                        'orders_detail_new.userID AS userID',
                                        'orders_detail_new.customerID AS customerID',
                                        'orders_detail_new.id AS rowID',
                                        'orders_detail_new.orderID AS orderID',
                                        'users_1.firstname AS FirstnameUser',
                                        'users_1.lastname AS LastnameUser',
                                        'users_2.firstname AS FirstnameCustomer',
                                        'users_2.lastname AS LastnameCustomer',
                                        'orders_detail_new.laboratory AS Laboratory',
                                        'orders_detail_new.ownerID AS ownerID',
                                        'orders_detail_new.statusorderID AS StatusID',
                                        'status_order.status_order AS Status',
                                        'orders_detail_new.deliverydate AS DeliveryDate',
                                        'product_types.product_type AS Type',
                                        'product_names.product_name AS Name',
                                        'dessert_servings.serving_persons AS Servings',
                                        'orders_detail_new.desserttextmessage AS Message',
                                        'orders_detail_new.dessertdecorchocolateID AS DecoChocoFruits',
                                        'orders_detail_new.dessertdecorflowerID AS DecoSmallFlowers',
                                        'orders_detail_new.piedecoration AS Decoration',
                                        'party_loaf_portions.portions AS Portions',
                                        'party_loaf_weights.weight AS Weight',
                                        'party_loaf_sandwiches_1.assortment AS Assortment1',
                                        'party_loaf_sandwiches_2.assortment AS Assortment2',
                                        'party_loaf_sandwiches_3.assortment AS Assortment3',
                                        'party_loaf_sandwiches_4.assortment AS Assortment4',
                                        'party_loaf_ribbons.color AS RibbonColor',
                                        'slicescutID AS Cut',
                                        'bread_quantity AS BreadQuantity',
                                        'savoury_canapes.assortment AS CanapésAssortment',
                                        'savoury_mini_puffs.assortment AS MiniPuffsAssortment',
                                        'savoury_mini_vols_au_vent.assortment AS VolsAuVentAssortment',
                                        'savoury_little_appetisers.assortment AS AppetisersAssortment',
                                        'sweet_sweets.assortment AS SweetAssortment',
                                        'orders_detail_new.sweet_quantity AS SweetQuantity',
                                        'orders_detail_new.savoury_quantity AS SavouryQuantity',
                                        'orders_detail_new.productprice AS Price',
                                        'orders_detail_new.productaddfee AS Surcharge',
                                        'orders_detail_new.piedecorationprice AS DecoSurcharge',
                                        'orders_detail_new.subtotal AS Total'
                                        )
                                ### ->orderby('orders_detail_new.id', '=', 'asc')
                                ->where('orders_detail_new.producttype_ID', '=', 4) // FOR test PURPOSE
                                ->where('orders_detail_new.productname', '=', 26) // FOR test PURPOSE
                                ### ->take(5) // FOR test PURPOSE
                                ->get();

dd($orders);
列:

->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
'users_1.firstname AS FirstnameUser',
'users_1.lastname AS LastnameUser',
'users_2.firstname AS FirstnameCustomer',
'users_2.lastname AS LastnameCustomer',
# SQL : GET THE ORDER DATA

$orders                     = DB::table('orders_detail_new')
                                ->leftJoin('status_order','orders_detail_new.statusorderID', '=', 'status_order.id')
                                ->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
                                ->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
                                ->leftJoin('dessert_servings','orders_detail_new.dessertservingID', '=', 'dessert_servings.id')
                                ->leftJoin('product_types','orders_detail_new.producttype_ID', '=', 'product_types.producttypeID')
                                ->leftJoin('product_names','orders_detail_new.productname_ID', '=', 'product_names.productname_ID')
                                ->leftJoin('party_loaf_portions','orders_detail_new.ID_portion', '=', 'party_loaf_portions.portion_ID')
                                ->leftJoin('party_loaf_weights','orders_detail_new.partyloafweightID', '=', 'party_loaf_weights.id')
                                ->leftJoin('party_loaf_sandwiches_1','orders_detail_new.partyloafsandwich1ID', '=', 'party_loaf_sandwiches_1.id')
                                ->leftJoin('party_loaf_sandwiches_2','orders_detail_new.partyloafsandwich2ID', '=', 'party_loaf_sandwiches_2.id')
                                ->leftJoin('party_loaf_sandwiches_3','orders_detail_new.partyloafsandwich3ID', '=', 'party_loaf_sandwiches_3.id')
                                ->leftJoin('party_loaf_sandwiches_4','orders_detail_new.partyloafsandwich4ID', '=', 'party_loaf_sandwiches_4.id')
                                ->leftJoin('party_loaf_ribbons','orders_detail_new.partyloafribbonID', '=', 'party_loaf_ribbons.id')
                                ->leftJoin('savoury_canapes','orders_detail_new.canapeID', '=', 'savoury_canapes.id')
                                ->leftJoin('savoury_mini_puffs','orders_detail_new.minipuffID', '=', 'savoury_mini_puffs.id')
                                ->leftJoin('savoury_mini_vols_au_vent','orders_detail_new.minivolsauventID', '=', 'savoury_mini_vols_au_vent.id')
                                ->leftJoin('savoury_little_appetisers','orders_detail_new.littleappetiserID', '=', 'savoury_little_appetisers.id')
                                ->leftJoin('sweet_sweets','orders_detail_new.sweetID', '=', 'sweet_sweets.id')
                                ->select(
                                        'orders_detail_new.userID AS userID',
                                        'orders_detail_new.customerID AS customerID',
                                        'orders_detail_new.id AS rowID',
                                        'orders_detail_new.orderID AS orderID',
                                        'users_1.firstname AS FirstnameUser',
                                        'users_1.lastname AS LastnameUser',
                                        'users_2.firstname AS FirstnameCustomer',
                                        'users_2.lastname AS LastnameCustomer',
                                        'orders_detail_new.laboratory AS Laboratory',
                                        'orders_detail_new.ownerID AS ownerID',
                                        'orders_detail_new.statusorderID AS StatusID',
                                        'status_order.status_order AS Status',
                                        'orders_detail_new.deliverydate AS DeliveryDate',
                                        'product_types.product_type AS Type',
                                        'product_names.product_name AS Name',
                                        'dessert_servings.serving_persons AS Servings',
                                        'orders_detail_new.desserttextmessage AS Message',
                                        'orders_detail_new.dessertdecorchocolateID AS DecoChocoFruits',
                                        'orders_detail_new.dessertdecorflowerID AS DecoSmallFlowers',
                                        'orders_detail_new.piedecoration AS Decoration',
                                        'party_loaf_portions.portions AS Portions',
                                        'party_loaf_weights.weight AS Weight',
                                        'party_loaf_sandwiches_1.assortment AS Assortment1',
                                        'party_loaf_sandwiches_2.assortment AS Assortment2',
                                        'party_loaf_sandwiches_3.assortment AS Assortment3',
                                        'party_loaf_sandwiches_4.assortment AS Assortment4',
                                        'party_loaf_ribbons.color AS RibbonColor',
                                        'slicescutID AS Cut',
                                        'bread_quantity AS BreadQuantity',
                                        'savoury_canapes.assortment AS CanapésAssortment',
                                        'savoury_mini_puffs.assortment AS MiniPuffsAssortment',
                                        'savoury_mini_vols_au_vent.assortment AS VolsAuVentAssortment',
                                        'savoury_little_appetisers.assortment AS AppetisersAssortment',
                                        'sweet_sweets.assortment AS SweetAssortment',
                                        'orders_detail_new.sweet_quantity AS SweetQuantity',
                                        'orders_detail_new.savoury_quantity AS SavouryQuantity',
                                        'orders_detail_new.productprice AS Price',
                                        'orders_detail_new.productaddfee AS Surcharge',
                                        'orders_detail_new.piedecorationprice AS DecoSurcharge',
                                        'orders_detail_new.subtotal AS Total'
                                        )
                                ### ->orderby('orders_detail_new.id', '=', 'asc')
                                ->where('orders_detail_new.producttype_ID', '=', 4) // FOR test PURPOSE
                                ->where('orders_detail_new.productname', '=', 26) // FOR test PURPOSE
                                ### ->take(5) // FOR test PURPOSE
                                ->get();

dd($orders);
我无法修复它,因此我将感谢您的专业知识

谢谢

查询:

->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
'users_1.firstname AS FirstnameUser',
'users_1.lastname AS LastnameUser',
'users_2.firstname AS FirstnameCustomer',
'users_2.lastname AS LastnameCustomer',
# SQL : GET THE ORDER DATA

$orders                     = DB::table('orders_detail_new')
                                ->leftJoin('status_order','orders_detail_new.statusorderID', '=', 'status_order.id')
                                ->leftJoin('users_r3_details AS users_1', 'orders_detail_new.userID', '=', 'users_1.userID')
                                ->leftJoin('users_r3_details AS users_2', 'orders_detail_new.customerID', '=', 'users_2.userID')
                                ->leftJoin('dessert_servings','orders_detail_new.dessertservingID', '=', 'dessert_servings.id')
                                ->leftJoin('product_types','orders_detail_new.producttype_ID', '=', 'product_types.producttypeID')
                                ->leftJoin('product_names','orders_detail_new.productname_ID', '=', 'product_names.productname_ID')
                                ->leftJoin('party_loaf_portions','orders_detail_new.ID_portion', '=', 'party_loaf_portions.portion_ID')
                                ->leftJoin('party_loaf_weights','orders_detail_new.partyloafweightID', '=', 'party_loaf_weights.id')
                                ->leftJoin('party_loaf_sandwiches_1','orders_detail_new.partyloafsandwich1ID', '=', 'party_loaf_sandwiches_1.id')
                                ->leftJoin('party_loaf_sandwiches_2','orders_detail_new.partyloafsandwich2ID', '=', 'party_loaf_sandwiches_2.id')
                                ->leftJoin('party_loaf_sandwiches_3','orders_detail_new.partyloafsandwich3ID', '=', 'party_loaf_sandwiches_3.id')
                                ->leftJoin('party_loaf_sandwiches_4','orders_detail_new.partyloafsandwich4ID', '=', 'party_loaf_sandwiches_4.id')
                                ->leftJoin('party_loaf_ribbons','orders_detail_new.partyloafribbonID', '=', 'party_loaf_ribbons.id')
                                ->leftJoin('savoury_canapes','orders_detail_new.canapeID', '=', 'savoury_canapes.id')
                                ->leftJoin('savoury_mini_puffs','orders_detail_new.minipuffID', '=', 'savoury_mini_puffs.id')
                                ->leftJoin('savoury_mini_vols_au_vent','orders_detail_new.minivolsauventID', '=', 'savoury_mini_vols_au_vent.id')
                                ->leftJoin('savoury_little_appetisers','orders_detail_new.littleappetiserID', '=', 'savoury_little_appetisers.id')
                                ->leftJoin('sweet_sweets','orders_detail_new.sweetID', '=', 'sweet_sweets.id')
                                ->select(
                                        'orders_detail_new.userID AS userID',
                                        'orders_detail_new.customerID AS customerID',
                                        'orders_detail_new.id AS rowID',
                                        'orders_detail_new.orderID AS orderID',
                                        'users_1.firstname AS FirstnameUser',
                                        'users_1.lastname AS LastnameUser',
                                        'users_2.firstname AS FirstnameCustomer',
                                        'users_2.lastname AS LastnameCustomer',
                                        'orders_detail_new.laboratory AS Laboratory',
                                        'orders_detail_new.ownerID AS ownerID',
                                        'orders_detail_new.statusorderID AS StatusID',
                                        'status_order.status_order AS Status',
                                        'orders_detail_new.deliverydate AS DeliveryDate',
                                        'product_types.product_type AS Type',
                                        'product_names.product_name AS Name',
                                        'dessert_servings.serving_persons AS Servings',
                                        'orders_detail_new.desserttextmessage AS Message',
                                        'orders_detail_new.dessertdecorchocolateID AS DecoChocoFruits',
                                        'orders_detail_new.dessertdecorflowerID AS DecoSmallFlowers',
                                        'orders_detail_new.piedecoration AS Decoration',
                                        'party_loaf_portions.portions AS Portions',
                                        'party_loaf_weights.weight AS Weight',
                                        'party_loaf_sandwiches_1.assortment AS Assortment1',
                                        'party_loaf_sandwiches_2.assortment AS Assortment2',
                                        'party_loaf_sandwiches_3.assortment AS Assortment3',
                                        'party_loaf_sandwiches_4.assortment AS Assortment4',
                                        'party_loaf_ribbons.color AS RibbonColor',
                                        'slicescutID AS Cut',
                                        'bread_quantity AS BreadQuantity',
                                        'savoury_canapes.assortment AS CanapésAssortment',
                                        'savoury_mini_puffs.assortment AS MiniPuffsAssortment',
                                        'savoury_mini_vols_au_vent.assortment AS VolsAuVentAssortment',
                                        'savoury_little_appetisers.assortment AS AppetisersAssortment',
                                        'sweet_sweets.assortment AS SweetAssortment',
                                        'orders_detail_new.sweet_quantity AS SweetQuantity',
                                        'orders_detail_new.savoury_quantity AS SavouryQuantity',
                                        'orders_detail_new.productprice AS Price',
                                        'orders_detail_new.productaddfee AS Surcharge',
                                        'orders_detail_new.piedecorationprice AS DecoSurcharge',
                                        'orders_detail_new.subtotal AS Total'
                                        )
                                ### ->orderby('orders_detail_new.id', '=', 'asc')
                                ->where('orders_detail_new.producttype_ID', '=', 4) // FOR test PURPOSE
                                ->where('orders_detail_new.productname', '=', 26) // FOR test PURPOSE
                                ### ->take(5) // FOR test PURPOSE
                                ->get();

dd($orders);
dd(订单)


我怀疑有相同的用户具有相同的customerId。尝试添加这些

->where('orders_detail_new.customerID', '!=', 'users_1.userID') 
->where('orders_detail_new.userID', '!=', 'users_2.userID') 

最后选择

->leftJoin('sweet_sweets','orders_detail_new.sweetID', '=', 'sweet_sweets.id')
->distinct()
->select(
来自@metal的溶液

在查询中添加distinct:

...
->distinct()
->get();

感谢您的建议,但是现在不再需要从
orders\u detail\u new
中返回8条记录(在MYSQL中测试,没有所有剩余的连接选择计数(
id
),其中
producttype\u id
=4和
productname\u id
=26),只返回3条记录…尝试删除第二条记录。相同的输出,3条记录返回似乎是一个数据问题,我们的最后一个选项是选择distinct()good,如果您能够找出哪个表提供了重复项,那就更好了。请不要忘记接受这个答案