-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"

然后我想检查“雷克萨斯”是否在上面的那些字符串中。如果它存在,那么我将显示这两行。

所以重点是,我真的很想知道在这种情况下如何编写 SQL Query,也许你有解决这个问题的最好方法。

感谢您帮助我,目前它正在与“LIKE”运营商合作。

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

但我认为即使它正在工作,问题仍未解决,因为我仍在使用单个长字符串。我同意 Tim 的建议,即我需要创建另一个表,但我认为我需要更多关于使用主键和外键连接两个表的教程

4

4 回答 4

4

不幸的是,当您决定存储一个长字符串时,您犯了一个错误。在单个列中存储多个数据是违反数据库规范化原则的。

正确的方法是,每个单独的值都放在一个表中自己的行中,该表只是为了存储这些值而创建的。该表中的每一行都有两个值,一个指向原始表的键值和一个您存储的单个文本值。

最好的解决方案是尽早重构您的数据库,以避免将更多的编程时间投入到只会让您头疼的设计中。

如果这不可能,我们需要更多地了解您正在使用的数据库产品。其中一些已经内置函数来处理这种查询(例如 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

你可以试试LIKE

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

探索 SQL全文搜索并将成员列声明为全文列,然后使用 WHERE CONTAIN 谓词在该全文列中查找某些字符串。使用链接

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