2017-03-22 10 views
0

を私に返しません。私は3を返す(IVC_Elementsは3つの異なるidを含んでいるので3)。MySQLのクエリは、私はこのクエリに問題があり、期待される結果に

-

所望の出力は、次のようになります。

|----------|----------|------------|----------|----------|--------------|--------------------|---------------------| 
| 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

@hassan、そうです。それは、より多くのMySQLの質問です。あなたの編集をありがとう。 – Abc

+0

すべての列がNULLの行を返します。 – McNets

答えて

3

なぜであなたがIVC_Elementsに昏睡区切られた文字列を格納していると、私は申し訳ありませんが、あなたはこの方法でそれを使用することはできませんので句が

動作しないWHERE上:

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)'部分の 'merge'のようなものであれば、それらを分けてはいけませんか? – Abc

関連する問題