2017-01-11 3 views
2

Моя среда:

У меня есть эти таблицы:Получить присоединился ДАННЫЕ во время выполнения запроса MySQL с PHP

Таблица ___Billing:

|----------|----------|----------|--------------|---------------------| 
| BIL_Id | BIL_Item | BIL_Rate | BIL_Quantity | BIL_ApplicableTaxes | 
|----------|----------|----------|--------------|---------------------| 
| 1  | Hot-Dog | 4.50  | 2   | 3     | 
| 2  | Tea  | 3.25  | 3   | 3,4     | 
|----------|----------|----------|--------------|---------------------| 

BIL_Id = идентификатор для этого элемента в этой таблице.
BIL_Item = идентификатор элемента (ссылка на таблицу ___SalesTaxes).
BIL_Quantity = количество товара, используемого клиентом.
BIL_ApplicableTaxes = идентификатор применимых налогов за этот товар. Каждый идентификатор табуляции разделяется запятой.


Таблица ___SalesTaxes:

|----------|--------------|------------| 
| STX_Id | STX_TaxeName | STX_Amount | 
|----------|--------------|------------| 
| 3  | Tax 1  | 3.50  | 
| 4  | Tax 2  | 6.55  | 
|----------|--------------|------------| 

STX_Id = идентификатор для этого элемента в этой таблице.
STX_TaxeName = наименование налога.
STX_Amount = сумма в процентах от налога.


Мой вопрос:

Как можно из этих двух таблиц, в цикле в ___Billing таблицу, чтобы получить налоги в процентах мне нужно применять?

Например:

  • В первом ряду, я должен иметь: 3.50.

  • Для второго ряда я должен иметь: 3.50, 6.55.

Надеюсь, что вопрос ясен.

Спасибо.

ответ

3

Если фраза ваш запрос правильно, то вы можете использовать FIND_IN_SET() функции MySQL, чтобы соответствовать налоговым идентификаторам Agains списка CSV вы имеете в BIL_ApplicableTaxes колонки:

SELECT t1.BIL_Id, 
     t1.BIL_Rate, 
     GROUP_CONCAT(COALESCE(t2.STX_Amount, 'NA')) AS tax_due 
FROM ___Billing t1 
LEFT JOIN ___SalesTaxes t2 
    ON FIND_IN_SET(t2.STX_Id, t1.BIL_ApplicableTaxes) > 0 
GROUP BY t1.BIL_Id 

Однако, вы должны серьезно рассмотреть вопрос о нормализации ___Billing таблицы и удаление CSV-данных. Вместо этого каждая налоговая запись должна иметь свою собственную запись.

Демо здесь:

SQLFiddle

+0

Спасибо за ваш интерес к этому вопросу. Могу ли я начать запрос по таблице '___ Billing' или мне нужно начать с' ___ SalesTaxes'? –

+0

@ user7347588 Да, вы можете, я обновил ваше предложение. –

Смежные вопросы