2017-01-13 9 views
0

私が作成した投稿を削除しようとしていますが、その投稿にも好き嫌いがあります。MYSQL異なる列から複数の行または単一の行を削除します

投稿を削除しようとすると、明らかにそのコメントや好きなものを削除できます。

私は仕事の種類のコードを持っています...私はまだかなり初心者ですので、私と一緒に裸をしてください..!

このコード:

DELETE p, a, n 
      FROM Posts p 
      INNER JOIN Activity a ON a.uuidPost = p.uuid 
      LEFT OUTER JOIN Notifications n ON n.uuidPost = p.uuid 
      WHERE p.uuid = '$uuid' 

はポストを削除しますが、いくつかの活動がある場合にのみ、(。元のために好きまたはコメント)が、そこには同類をされていないか、それは投稿を削除しないコメントしている場合..

私は可能な場合にこれが起こっている理由を理解しようとするいくつかの助けをすることができますか?

私にしばらく時間を惜しみません。

+0

「INNER JOIN」は、両方のテーブルで一致する行のみを検索します。それは「INNER JOIN」と「OUTER JOIN」の違いです。 – Barmar

+0

@Barmarこんにちは、何をお勧めしますか?私は 'INNER JOIN'を 'OUTER JOIN'に変更しました。それはうまくいっています...正しいのでしょうか? – Charles

答えて

1

INNER JOINを使用すると、DELETEJOINによって返された行のみを削除します。投稿がActivityに一致しない場合でも投稿を削除するには、LEFT OUTER JOINを使用する必要があります。一致しない場合でも、最初のテーブルから行が返されます。あなたが投稿を削除する場合CASCADEオプションが自動的にこれらのテーブルに関連する行を削除します - あなたはON DELETE CASCADEと外部キーとしてuuidPostを宣言した場合

DELETE p, a, n 
FROM Posts p 
LEFT OUTER JOIN Activity a ON a.uuidPost = p.uuid 
LEFT OUTER JOIN Notifications n ON n.uuidPost = p.uuid 
WHERE p.uuid = '$uuid' 

ところで、あなたは、すべての結合を使用する必要はありません。

+0

すばらしい!ありがとう、2番目のオプションは興味深いようです...現在のクエリを変更することをお勧めしますか?または彼らはまったく同じに働くでしょうか? – Charles

+0

彼らは同じように動作します。 – Barmar

関連する問題