0

私は SQL がまったく初めてで、現在 6 時間使用しています。私は単純なものが欠けているに違いありません。一言で言えば、データベース内の別のテーブルの部分一致文字列に基づいて、Wordpress データベース内の投稿を削除したいと考えています。

これが私がこれまでに得たものです。私がやろうとしていることを説明する必要があります:

CASE
WHEN option_value FROM wp_options LIKE '%domain.com%'
THEN DELETE FROM wp_posts WHERE post_title = 'uniqueID'
ELSE DELETE FROM wp_posts WHERE post_title = 'XXXXXXXXXX'
END

ELSE と X は、一致しない場合に何も変更されないようにするためにあります。

私は何が欠けていますか?:-)

@Dan Bracukこれは、トリックを実行した最終的なコードです。

DELETE FROM wp_posts
WHERE post_title = 
CASE
WHEN (SELECT option_value FROM wp_options WHERE option_value LIKE '%domain.com%' LIMIT 1) LIKE '%domain.com' THEN 'UniqueID'
ELSE 'XXXXXXX' 
END
4

4 に答える 4

0

SQL 構文が無効です。次のようにする必要があります。

 delete from wp_posts
 where post_title = 
 case 
 when (subquery to get data from option_value table) like '%domain.com%' then 'uniqueId'
 else 'XXXXXXX' 
 end

ただし、ここでは case 構文を使用しない方がよいでしょう。私はこのようなことをします:

 delete from wp_posts
 where 
 (post_title = 'uniqueId'
 and somefield in
 (select somefield 
 from option_value
 where wp_options like '%domain.com%'
 )
 )
 or
 (post_title = 'XXXXXX'
 and somefield in
 (select somefield 
 from option_value
 except
 select somefield 
 from option_value
 where wp_options like '%domain.com%'
 )
 )

データベースによっては、except の代わりにマイナスという単語を使用するものもあれば、単にその構文をサポートしていないものもあります。ただし、これで一般的なアイデアが得られます。

于 2013-07-05T13:59:22.927 に答える
0

もう少し文脈がないと決定的な答えを出すのは難しいです。ただし、コードを最初に見てから、標準の SQL 構文に準拠する必要があると仮定すると、次の行を次のように更新する必要があります。

option_value FROM wp_options LIKE '%domain.com%'

WHEN EXISTS(SELECT 1 FROM wp_options WHERE option_value LIKE '%domain.com%')

それが役立つことを願っています!

于 2013-07-05T13:29:48.620 に答える