0

「MYprojects」という名前のテーブルと「Rights」という名前の列があります。次の行があります

id =>1

rights => 7,4,34,532,12,32

number-in rights 列のいずれかが次の値に存在する場合、その行を削除する必要があります

2,4,65,34

ご覧のとおり、列の値に 4 が含まれているため、その行を削除する必要があります。誰かがこれに対するmysqlクエリまたは関数を教えてもらえますか? ループを適用することでサーバー側のスクリプトで実行できますが、最適化されたソリューションが必要ですありがとう

4

2 に答える 2

0
DELETE FROM `MYprojects` WHERE `rights` REGEXP '(^|,)2($|,)' OR `rights` REGEXP '(^|,)4($|,)' OR `rights` REGEXP '(^|,)65($|,)' OR `rights` REGEXP '(^|,)34($|,)'

私が考えることができる最もきちんとした方法です。正規表現は、入力された数値が別の数値の一部ではなく、リストの一部であることを確認します (たとえば、'1' は '11' と一致しません)。SELECTスクリプトを使用してクエリを作成する場合は、クエリを作成するためにループが必要ですが、最初に多くの ingを実行するのに比べて最小限です。

于 2012-05-29T12:21:49.847 に答える
0

MySQL の関数を使用できます(これは、列がデータ型を使用して格納されているFIND_IN_SET()場合に特に効率的です)。RightsSET

DELETE FROM MYprojects WHERE
     FIND_IN_SET( 2, Rights)
  OR FIND_IN_SET( 4, Rights)
  OR FIND_IN_SET(65, Rights)
  OR FIND_IN_SET(34, Rights)

ただし、daghan のコメントのように、MySQL のリレーショナルデータベース管理機能を利用する、より適切なデータ構造を検討する必要があります。

于 2012-05-29T12:21:59.040 に答える