我有3张桌子;产品,变体和库存{简化}
产品 ID 名称 已停止(ENUM:0或1) 等
VARIANTS ID PRODUCT_ID 颜色 大小
STOCK ID variant_id branch_id
当用户选择停止PRODUCT时,我将已停止的标志设置为1.这没关系,但如果没有产品的STOCK记录,我想完全删除PRODUCT和VARIANTS记录。显然,我可以首先在PHP中使用SELECT查询,但我想在一个mySQL查询中执行此操作。这是我到目前为止,但它从mySQL返回错误:
$query = "DELETE FROM prod_lines,
JOIN variants ON variants.lineid = prod_lines.id
WHERE prod_lines.id = '$lineid' AND
(SELECT COUNT(id) FROM stock WHERE stock.variantid = variants.id) = 0";
那里有人帮我提出正确的解决方案吗?也许有更好的方法甚至不涉及子查询?
提前致谢
答案 0 :(得分:3)
我认为您查询中的product_line
表格是您在帖子开头描述的PRODUCTS
表格。
DELETE prod_lines.* -- you must specify which table you are deleting from, because there are several tables in the FROM clause
FROM prod_lines
JOIN variants ON variants.lineid = prod_lines.id
LEFT JOIN stock ON stock.variantid = variants.id
WHERE prod_lines.id = @lineid -- your "$lineid" variable here
AND stock.id IS NULL; -- selects only items with no match in the "stock" table
答案 1 :(得分:0)
尝试这样的事情,不利的一面是虽然你必须在这里有两个php变量,还有一个你可能不适合的嵌套查询
DELETE FROM (select COUNT(id) countstock FROM stock s,variants v WHERE s.variantid = v.id and v.productid='$lineid') prod
where prod.countstock>1 and prod.productid='$lineid'