Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一个MySQL语句来连接表并进行一些计算_Php_Mysql_Sql_Join - Fatal编程技术网

Php 一个MySQL语句来连接表并进行一些计算

Php 一个MySQL语句来连接表并进行一些计算,php,mysql,sql,join,Php,Mysql,Sql,Join,我有两张桌子,分别叫做“书”和“设置类别”。我想将它们结合在一起,并通过示例计算结果创建一个新的现场调用“final_price” cate_id cate_name 1 Fiction 2 Dictionary book_id cate_id book_name price special_offer special_offer_type cate_name

我有两张桌子,分别叫做“书”和“设置类别”。我想将它们结合在一起,并通过示例计算结果创建一个新的现场调用“final_price”

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
如何使用一个MySQL语句来实现这一点

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
我试过了,但没有一句话:

SELECT * FROM setting_category JOIN book ON book.cate_id =
setting_category.cate_id WHERE cate_name = 'Fiction'

SELECT * , (CASE WHEN special_offer_type = 'Fixed Value' THEN price -
special_offer WHEN special_offer_type = 'Discount %' THEN price * (1 -
(special_offer /100)) END) AS final_price FROM book
cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
设置类别

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
结果表

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100

您可以使用
case
语句进行计算:

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
select b.*, sc.cate_name,
       (case when special_offer_type = 'FixedValue'
             then b.price - b.special_offer
             when special_offer_type = 'Discount%'
             then b.price * (1 - b.special_offer/100.0)
             else b.price
        end) as final_price
from book b join
     setting_category sc
     on b.cate_id = sc.cate_id;

组合它们的最简单方法是从两个表(t1.fieldA、t1.fieldB、t2.fieldC等)中取出所有需要的字段,然后像您刚才在case语句中那样创建一个字段。所以它看起来像这样:

cate_id cate_name                       
1       Fiction                     
2       Dictionary
book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100
SELECT
     (CASE WHEN t1.special_offer_type = 'Fixed Value' THEN t1.price - t1.special_offer WHEN t1.special_offer_type = 'Discount %' THEN t1.price * (1 - (t1.special_offer /100)) END) AS final_price,
     t1.book_id,
     t1.book_name,
FROM
     book t1
JOIN
     setting_category t2
 ON
     t1.cate_id = t2.cate_id
 WHERE
     t2.WHERE cate_name = 'Fiction';

请提供一些更具教育意义的解释。@LaszloPapp是的,我在发布后考虑过这一点。。谢谢你让我保持诚实:PTHX Gordon我在“字段列表”中得到了一个错误
#1054-未知列“sc.special\u offer”
@user3453786。这是因为
特价
出现在
图书
表中。