1

私は3つのテーブルを持っています。製品、バリエーション、在庫{簡略化}

PRODUCTS ID名は廃止されました(ENUM:0または1)など

VARIANTSidproduct_idカラーサイズ

STOCK id Variant_id branch_id

ユーザーがPRODUCTの中止を選択した場合、中止フラグを1に設定しました。これで問題ありませんが、製品のSTOCKレコードがない場合は、PRODUCTレコードとVARIANTSレコードを完全に削除したいと思います。明らかに、PHPで最初にSELECTクエリを使用してこれを実行できますが、1つの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";

誰かが私が正しい解決策を考え出すのを手伝ってくれる?たぶん、サブクエリさえ含まないより良い方法がありますか?

前もって感謝します

4

2 に答える 2

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

http://sqlfiddle.com/#!2/40a21

于 2012-06-24T11:06:49.743 に答える
0

このようなことを試してみてください。欠点は、ここに2つの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'
于 2012-06-24T10:54:48.573 に答える