2017-03-22 2 views
0

예상 된 결과 반환하지 않습니다 :이 sqlFiddle (http://sqlfiddle.com/#!9/b2016)에서 내 실제 datas와MySQL의 쿼리 나에게 내가이 쿼리에 문제가

SELECT *, 
GROUP_CONCAT(COALESCE(STX_Amount, "0")) AS ApplicableTaxesRate, 
GROUP_CONCAT(COALESCE(STX_TaxeName, "0")) AS ApplicableTaxesName 
FROM ___BillableDatas 
JOIN ___Invoices ON ___BillableDatas.BIL_BookingId=___Invoices.IVC_BookingId 
JOIN ___Bookings ON ___BillableDatas.BIL_BookingId=___Bookings.BOO_Id 
JOIN ___Inventory ON ___BillableDatas.BIL_Item=___Inventory.INV_Id 
LEFT JOIN ___SalesTaxes ON FIND_IN_SET(STX_Id, BIL_ApplicableTaxes) > 0 
WHERE BIL_HotelId='AAA00' AND IVC_Id=14 AND BIL_Id IN (IVC_Elements) 
ORDER BY BIL_Id ASC 

을,이 쿼리 나에게 한 행이해야 반면를 반환 나를 돌려 준다 3 (IVC_Elements은 3 개의 다른 id를 포함하기 때문에 3).

|----------|----------|------------|----------|----------|--------------|--------------------|---------------------| 
| BIL_Id | IVC_Id | BIL_Date | BIL_Rate | BIL_Type | BIL_Quantity | INV_Name   | BIL_ApplicableTaxes | 
|----------|----------|------------|----------|----------|--------------|--------------------|---------------------| 
| 31  | 14  | 2017-03-15 | 130.00 | Night | 1   |     |      | 
| 32  | 14  | 2017-03-13 | 130.00 | Night | 1   |     |      | 
| 33  | 14  | 2017-03-17 | 130.00 | Night | 1   |     |      | 
| 45  | 14  | 2017-11-01 | 100.00 | Item  | 5   | Lit supplémentaire | 11     | 
| 50  | 14  | 2017-03-16 | 12.00 | Item  | 2   | Petit-déjeuner  |      | 
|----------|----------|------------|----------|----------|--------------|--------------------|---------------------| 

어떤 도움을주십시오 : -

는 원하는 출력은 다음되어야 하는가?

+0

php는 다음과 같습니다. 이 문제와 관련이 있습니까? – hassan

+0

@ 하산, 네 말이 맞아. 그것은 더 많은 mySQL 질문입니다. 편집 해 주셔서 감사합니다. – Abc

+0

모든 열이 null 인 행을 반환합니다. – McNets

답변

3

왜 당신이 혼수 상태가 미안 해요, IVC_Elements에 문자열을 구분하고 저장되기 때문에 절

작동하지 않지만,이 방법에서 사용할 수없는 위치에 :

WHERE FIELD IN (FIELD_WITH_COMA_DELIMITED_VALUES); 
IN 절

값의 목록을 필요로

사실 현재 값 '31, 32,33 '을 사용하면 평가할 수있는 유일한 값인 ID = 31을 반환하지만 '32, 31,33'만큼 변경하려고하면 행 ID를 얻습니다 = 32.

+--------+--------+------------+----------+----------+--------------+----------+---------------------+ 
| BIL_Id | IVC_Id | BIL_Date | BIL_Rate | BIL_Type | BIL_Quantity | INV_Name | BIL_ApplicableTaxes | 
+--------+--------+------------+----------+----------+--------------+----------+---------------------+ 
| 31  | 14  | 2017-03-15 | 130,00 | Night | 1   |   |      | 
+--------+--------+------------+----------+----------+--------------+----------+---------------------+ 
| 32  | 14  | 2017-03-16 | 130,00 | Night | 1   |   |      | 
+--------+--------+------------+----------+----------+--------------+----------+---------------------+ 
| 33  | 14  | 2017-03-17 | 130,00 | Night | 1   |   |      | 
+--------+--------+------------+----------+----------+--------------+----------+---------------------+ 

은 여기를 확인하십시오 :

당신이 그것을 해결할 수있는 방법으로 그것을 변경 :

FIND_IN_SET(BIL_Id, IVC_Elements) > 0 

이 방법에 조회를 변경 :

SELECT BIL_Id, IVC_Id, DATE_FORMAT(BIL_Date, "%Y-%m-%d") BIL_Date, BIL_Rate, BIL_Type, 
      BIL_Quantity, COALESCE(INV_Name, '') INV_Name, BIL_ApplicableTaxes 
FROM  ___BillableDatas 
JOIN  ___Invoices 
ON  ___BillableDatas.BIL_BookingId = ___Invoices.IVC_BookingId 
JOIN  ___Bookings 
ON  ___BillableDatas.BIL_BookingId = ___Bookings.BOO_Id 
LEFT JOIN ___Inventory 
ON  ___BillableDatas.BIL_Item = ___Inventory.INV_Id 
LEFT JOIN ___SalesTaxes 
ON  FIND_IN_SET(BIL_ApplicableTaxes, STX_Id) > 0 
WHERE  BIL_HotelId='AAA00' 
AND  IVC_Id=14 
AND  FIND_IN_SET(BIL_Id, IVC_Elements) > 0 
ORDER BY BIL_Id ASC 
; 

다음은 결과입니다 : http://rextester.com/BMX51701

+0

내 문제에 관심을 가져 주셔서 감사합니다. 사실, 자발적으로 예제의 데이터 수량을 최소화했기 때문에 ___Inventory에서 일치하는 데이터가 없습니다. 내 질문은 왜'IN (IVC_Elements) '을 사용하여 하나의 행을 반환하는지 더 자세히 설명합니다. 내 예제를 새로운 데이터로 업데이트하려고 노력할 것이다. 그것은 우리에게 많은 도움이 될 것입니다. 다시 한번 감사드립니다. – Abc

+0

데이터를 업데이트하고 쿼리가 데이터와 작동하도록하려고했습니다. 다시 확인해 주시겠습니까? 감사. – Abc

+0

'IVC_Elements' (31,32,33)의 요소는'BIL_Id' == 31 || 32 || 33 인'___ BillableDatas' 테이블에 링크됩니다. 이 경우 31, 32, 33은 항목이 아니므로 밤이므로이 경우 항목 이름을'___ Iventory' 테이블에 가져올 필요가 없습니다. 그래서 정상입니다. 그래서 실제 문제는 '병합'과 같은 경우 'BIL_Id IN (IVC_Elements)'부분은 데이터를 분리하지 않아도됩니까? – Abc