我正在使用以下查询从数据库中获取记录。它已与许多其他表连接。一切工作正常,但问题是我得到多行相同的预订,这是因为预订表已加入付款表,付款表有多行反对一个预订,这就是为什么它重复完整记录。我想要的是显示其中包含所有付款行的单行,以便我可以遍历所有付款并显示它们,而不是一次又一次地显示整个预订记录。下面是我的查询。这是Laravel 5.2。
return $results = DB::table('resorts_reservation')
->join('resorts_resort', 'resorts_reservation.resortId', '=', 'resorts_resort.resortId')
->join('resorts_roomtype', 'resorts_reservation.roomTypeId', '=', 'resorts_roomtype.roomTypeId')
->join('resorts_customer', 'resorts_reservation.customerId', '=', 'resorts_customer.customerId')
->join('resorts_salesperson', 'resorts_reservation.salesPersonId', '=', 'resorts_salesperson.salesPersonId')
->join('resorts_payment', 'resorts_reservation.reservationId', '=', 'resorts_payment.reservationId')
->join('resorts_paymentmethod', 'resorts_payment.paymentMethodId', '=', 'resorts_paymentmethod.paymentMethodId')
->join('resorts_emailnotification', 'resorts_reservation.reservationId', '=', 'resorts_emailnotification.reservationId')
->join('resorts_resortcompany', 'resorts_resort.resortCompanyId', '=', 'resorts_resortcompany.resortCompanyId')
->select('resorts_reservation.totalAmount', 'resorts_reservation.saleDate', 'resorts_reservation.reservationId',
'resorts_reservation.confirmNo', 'resorts_reservation.numberOfNights', 'resorts_reservation.checkInDate',
'resorts_reservation.checkOutDate', 'resorts_reservation.numberOfAdults', 'resorts_reservation.numberOfChildren',
'resorts_reservation.totalInParty', 'resorts_reservation.notes', 'resorts_reservation.totalPrice',
'resorts_reservation.saleSource', 'resorts_reservation.depositAmount', 'resorts_reservation.confirmationSent',
'resorts_reservation.finalized',
'resorts_customer.firstName', 'resorts_customer.mobilePhone', 'resorts_customer.otherPhone',
'resorts_customer.email', 'resorts_customer.addressLineOne', 'resorts_customer.city',
'resorts_customer.country', 'resorts_customer.state_', 'resorts_customer.postalCode',
'resorts_resort.resortName',
'resorts_roomtype.roomTypeDesc', 'resorts_roomtype.occupancy',
'resorts_salesperson.firstName as saleFirstName','resorts_salesperson.lastName as saleLastName',
'resorts_paymentmethod.methodType',
'resorts_payment.transactionNo',
'resorts_resortcompany.resortCompanyName')
->whereRaw($where)
->orderBy('reservationId', 'desc')
->get();
以下是查询返回的结果。您可以看到两个行都有相同的记录,只有“transactionNo”列更改。
[0] => stdClass Object
(
[totalAmount] => 2161.2
[saleDate] => 2016-03-09 00:00:00
[reservationId] => 30286
[confirmNo] =>
[numberOfNights] => 3
[checkInDate] => 2016-04-22 00:00:00
[checkOutDate] => 2016-04-25 00:00:00
[numberOfAdults] => 6
[numberOfChildren] => 0
[totalInParty] => 6
[notes] =>
[totalPrice] => 2161.2
[saleSource] => VRBO
[depositAmount] => 2161.2
[confirmationSent] => 0
[finalized] => 0
[firstName] => Michael
[mobilePhone] => 505-321-2106
[otherPhone] =>
[email] => xxxxxxxx@gmail.com
[addressLineOne] =>
[city] => Albuquerque
[country] => USA
[state_] => NM
[postalCode] => 87111
[resortName] => San Francisco - Canterbury
[roomTypeDesc] => 3 Bedroom Presidential
[occupancy] => 6
[saleFirstName] => Kristy
[saleLastName] => Conlin
[methodType] => CREDIT_CARD
[transactionNo] => 7MG983973K453254C
[resortCompanyName] => Wyndham
)
[1] => stdClass Object
(
[totalAmount] => 2161.2
[saleDate] => 2016-03-09 00:00:00
[reservationId] => 30286
[confirmNo] =>
[numberOfNights] => 3
[checkInDate] => 2016-04-22 00:00:00
[checkOutDate] => 2016-04-25 00:00:00
[numberOfAdults] => 6
[numberOfChildren] => 0
[totalInParty] => 6
[notes] =>
[totalPrice] => 2161.2
[saleSource] => VRBO
[depositAmount] => 2161.2
[confirmationSent] => 0
[finalized] => 0
[firstName] => Michael
[mobilePhone] => 505-321-2106
[otherPhone] =>
[email] => xxxxxxxx@gmail.com
[addressLineOne] =>
[city] => Albuquerque
[country] => USA
[state_] => NM
[postalCode] => 87111
[resortName] => San Francisco - Canterbury
[roomTypeDesc] => 3 Bedroom Presidential
[occupancy] => 6
[saleFirstName] => Kristy
[saleLastName] => Conlin
[methodType] => CREDIT_CARD
[transactionNo] =>
[resortCompanyName] => Wyndham
)
我想要的是下面的内容:
[0] => stdClass Object
(
[totalAmount] => 2161.2
[saleDate] => 2016-03-09 00:00:00
[reservationId] => 30286
[confirmNo] =>
[numberOfNights] => 3
[checkInDate] => 2016-04-22 00:00:00
[checkOutDate] => 2016-04-25 00:00:00
[numberOfAdults] => 6
[numberOfChildren] => 0
[totalInParty] => 6
[notes] =>
[totalPrice] => 2161.2
[saleSource] => VRBO
[depositAmount] => 2161.2
[confirmationSent] => 0
[finalized] => 0
[firstName] => Michael
[mobilePhone] => 505-321-2106
[otherPhone] =>
[email] => xxxxxxxx@gmail.com
[addressLineOne] =>
[city] => Albuquerque
[country] => USA
[state_] => NM
[postalCode] => 87111
[resortName] => San Francisco - Canterbury
[roomTypeDesc] => 3 Bedroom Presidential
[occupancy] => 6
[saleFirstName] => Kristy
[saleLastName] => Conlin
[methodType] => CREDIT_CARD
array(
[transactionNo] => 7MG983973K453254C
[transactionNo] =>
)
[resortCompanyName] => Wyndham
)
答案 0 :(得分:0)
您可以使用GROUP-CONCAT功能对每个预订的所有付款交易编号进行分组。
此函数返回带有连接非NULL的字符串结果 一组中的值。如果没有非NULL值,则返回NULL。
您的查询将如下所示:
SELECT resorts_reservation.totalAmount, ..., GROUP_CONCAT(resorts_payment.transactionNo separator ', ') as transactionNoList
WHERE...
希望这是有道理的,如果没有,我会很乐意澄清。
汤姆拉什曼