-1

実際、私は TCP/IP を使用してクライアント/サーバー プログラムを作成しています。この場合、クライアントはファイルをアップロードし、ファイルをパブリック、グループ、またはプライベートに共有するかどうかを選択できます。問題は、クライアントがファイルをグループ (他のクライアント/メンバー) と共有することを選択した場合です。初心者として、選択したメンバーの名前を含む文字列配列を SQL データベースに格納する方法がわかりません。そこで、以下の例のような長い文字列を作成することにしました。

//assume this is the long string stored in column called "member"

 //this is row1// "Lexus,Mitsubishi,Bmw,Audi,Ford"

//this is row2// "12345678,456789,54321,87654321,Lexus"

次に、「Lexus」が上記の文字列に含まれているかどうかを確認したいと思います。存在する場合は、それらの 2 つの行を表示します。

要点は、この場合の SQL クエリの書き方を本当に知りたいということです。おそらく、この問題を解決する最善の方法をあなたが持っているでしょう。

助けてくれてありがとう、現在は「LIKE」演算子で動作しています。

 SELECT * FROM TABLENAME WHERE ROW1 LIKE '%LEXUS%'

しかし、私はまだ単一の長い文字列を使用しているため、機能していても問題はまだ解決していないと思います。別のテーブルを作成する必要があるというティムの提案には同意しますが、主キーと外部キーを使用して 2 つのテーブルを接続する方法については、さらにチュートリアルが必要だと思います。

4

4 に答える 4

4

残念ながら、1つの長い文字列を保存することにしたときに間違いを犯しました。1つの列に複数のデータを格納することは、データベースの正規化の原則に違反します。

正しいアプローチは、これらの値を格納するためだけに作成されたテーブルの各行に個別の値を配置することです。そのテーブルの各行には、元のテーブルを指すキー値と、保存している単一のテキスト値の2つの値があります。

最善の解決策は、できるだけ早い時期にデータベースをリファクタリングして、将来の頭痛の種となるだけの設計にプログラミング時間を費やさないようにすることです。

それが不可能な場合は、使用しているデータベース製品について詳しく知る必要があります。それらのいくつかは、この種のクエリを処理する関数を組み込んでいます(たとえば、MySQLのFIND_IN_SET)が、これらの回避策は決して良いパフォーマンスを発揮せず、製品ごとに非標準です。

于 2012-09-18T18:54:18.170 に答える
1

LIKE演算子を使用してみましたか?

SELECT * FROM TABLENAME WHERE ROW1 LIKE '%LEXUS%'

于 2012-09-18T18:51:28.483 に答える
0

SQL全文検索を調べ、メンバー列を全文列として宣言してから、WHERE CONTAIN述語を使用して、その全文列に含まれる文字列を検索します。リンクを使用

msdn.microsoft.com/en-us/library/ms142571.aspx 
于 2012-09-18T19:14:13.810 に答える
0

あなたはで試すことができますLIKE

SELECT * FROM TABLE WHERE COLUMN LIKE '%Lexus%'
于 2012-09-18T18:53:19.720 に答える