0

次のような値を取得する方法はありますか:「300、400、500、300」は、カンマで区切られた各数値をチェックし、2倍になっている場合は削除します。したがって、値は「300、400、500」のようになります。

PHPスクリプトでそれを行うことはできますが、MySQLを使用してそれが可能かどうか疑問に思います。

4

2 に答える 2

0

一意のインデックスを持つ一時テーブルを作成し、重複エラーを無視して値を挿入し、一時テーブルからすべてのレコードを選択し、テーブルを削除します。

于 2013-02-26T14:39:33.643 に答える
0

クイックプレイですが、各行の一意の値を取得するには、次のようなものを使用できます

SELECT Id, GROUP_CONCAT(DISTINCT aWord ORDER BY aWord ASC)
FROM (SomeTable.Id, SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(SomeColumn, ','), ' ', aCnt), ',', -1) AS aWord
FROM SomeTable
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(SomeColumn) + 1 - LENGTH(REPLACE(SomeColumn, ',', ''))) >= aCnt) Sub2
GROUP BY ID

これは、0 から 9 までの値を含む 10 行の i という単一の列を持つ integers というテーブルを持つことに依存しています。これは最大 1000 語まで対応しますが、より多くの語に対応するように簡単に変更できます。

INSERT / ON DUPLICATE KEY UPDATE を使用して、これを使用して値を一意にするのがおそらく最も簡単です。

于 2013-02-26T14:44:28.100 に答える