使用PHP在MySQL查询期间获取连接数据

时间:2017-01-11 05:23:32

标签: php mysql

我的环境:

我有这些表格:

___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 =此表中此项目的ID BIL_Item =项目的ID(指___SalesTaxes表) BIL_Quantity =客户使用的商品数量 BIL_ApplicableTaxes =此商品的适用税金的ID。每个taxe id都以逗号分隔。

___SalesTaxes

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

STX_Id =此表中此项目的ID STX_TaxeName =纳税人的姓名 STX_Amount =纳税人的百分比。

我的问题:

如何通过这两个表循环进入___Billing表格以获得我需要应用的税率?

例如:

  • 对于第一行,我应该:3.50

  • 对于第二行,我应该:3.50, 6.55

希望问题很明确。

感谢。

1 个答案:

答案 0 :(得分:2)

如果您正确地表达了自己的查询,则可以使用MySQL的FIND_IN_SET()功能将税号再次与BIL_ApplicableTaxes列中的CSV列表进行匹配:

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