1

そのため、mySQL データベースにいくつかの CSV 値が保存されています。

例えば:

ID    Name     parentID
1     Dave     1,4,6
2     Josh     2
3     Pete     10
4     Andy     2,10

このクエリの使用

SELECT * FROM `table` WHERE `parentID` LIKE %4%

Dave だけが返されます。これは正しいです。ただし、LIKE %1% を使用して選択すると、「1」が含まれているため、ピートとアンディがデイブと同様に選択されます。

たとえば、「10」と「1」を区別できるクエリが必要です。カンマ間の各値が異なることを認識し、最後のカンマが省略される可能性があることを理解する必要があります。

おそらくREGEXが代わりに仕事をすることができると考えるのは正しいですか?

ありがとう。

4

1 に答える 1

3

正規表現を使用して「単語境界」に一致させることができます。

WHERE parentID RLIKE '[[:<:]]4[[:>:]]'

または、カンマ区切りの文字列の要素を解析する特別な関数を使用できます。

WHERE FIND_IN_SET('4', parentID) <> 0

@Nanne からのコメントに同意します。

また、コンマ区切りのリストではなく、正規化された方法でデータを保存する方がよいこともわかります。現時点でスキーマを自由に変更できるかどうかはわかりませんが、価値があるので、質問に対する私の回答を読んでください

于 2013-06-13T20:18:16.783 に答える