有人可以告诉我以下 MYSQL 查询的正确语法吗:
IF (order_title_1 IS NULL OR order_title_1 = '') WHERE order_id = '$id') THEN
UPDATE orders
SET order_product_id_1='$product_id', order_title_1='$order_title', order_size_1='$size', order_quantity_1= 1
WHERE order_id = '$id'
ELSE
UPDATE orders
SET order_product_id_2='$product_id', order_title_2='$order_title', order_size_2='$size', order_quantity_2= 1
WHERE order_id = '$id'
END IF";
我希望 IF 语句检查与 order_id 匹配的特定行中的 order_title_1 是否为 NULL 或为空。如果该列为空,则执行下面的 UPDATE 语句,但是,如果该列 IS NOT NULL 或为空,则执行 ELSE 之后的辅助 UPDATE 语句。
谢谢。
---更新---
我意识到我的查询逻辑不正确。
在伪代码中,我尝试根据产品框是否为空向产品框添加详细信息。
因此,第一次扫描产品时 - 会将产品放置在第一个插槽中,第二次扫描产品时会将其放置在第二个插槽中,第三次扫描产品时会将其添加到第三个未占用的插槽,依此类推。当扫描第一个产品时,详细信息将被放入所有未占用的插槽中。当扫描每个新产品时,下面未占用的插槽将全部替换为新产品详细信息。
我需要一种方法来分隔每个查询,以便如果前一个插槽已被占用,则产品详细信息将按顺序添加到下一个未占用的插槽。我可以为每个产品盒创建一个单独的扫描功能,但我认为我可以将它们与某种形式的 IF/ELSE 语句结合起来。
有人可以提出解决方案吗?
谢谢
最佳答案
一种方法:
UPDATE orders
SET order_product_id_1 = IF(order_title_1 IS NULL OR order_title_1 = '', '$product_id' , order_product_id_1),
order_title_1 = IF(order_title_1 IS NULL OR order_title_1 = '', '$order_title' , order_title_1 ),
order_size_1 = IF(order_title_1 IS NULL OR order_title_1 = '', '$size' , order_size_1 ),
order_quantity_1 = IF(order_title_1 IS NULL OR order_title_1 = '', 1 , order_quantity_1 ),
order_product_id_2 = IF(order_title_1 IS NULL OR order_title_1 = '', order_product_id_2, '$product_id' ),
order_title_2 = IF(order_title_1 IS NULL OR order_title_1 = '', order_title_2 , '$order_title' ),
order_size_2 = IF(order_title_1 IS NULL OR order_title_1 = '', order_size_2 , '$size' ),
order_quantity_2 = IF(order_title_1 IS NULL OR order_title_1 = '', order_quantity_2 , 1 )
WHERE order_id = '$id'
但是,此架构似乎是非规范化的,并且可能会受益于将此类项目详细信息分离到引用它们所属顺序的单独表中。
关于php - 如何将 IF 语句与 UPDATE 语句结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187289/