用逗号分隔搜索

时间:2013-07-03 09:44:52

标签: php mysql csv

我正在创建一个名为company_Registration的表来存储

company_id  
company_name  
product_escription  

---使用php和mysql ---

我希望product_description列应该采用多个值,例如IC芯片,电机

并且应该用逗号分隔..

我知道如何将.csv文件导入数据库并且工作正常..

但是,我希望当用户在网页中搜索时,应将product_description列值视为以逗号分隔,如何实现?

1 个答案:

答案 0 :(得分:1)

虽然可以在逗号分隔的列表中搜索匹配(例如使用FIND_IN_SET),但它是令人讨厌的代码,低效,阻止参照完整性,通常是一个非常糟糕的主意(尽管不是很糟糕)在php字段中存储php序列化数组)。

至少创建一个额外的描述表,每个公司的每个描述都有一行。

可能更好的是有一个可能的描述表,然后是每个公司有很多行的链接表,每个描述一个。链接表行只包含公司的唯一ID和描述的唯一ID。

例如,简单的表

<强> CompanyTable

CompanyId

公司名称

<强>的productTable

产品编号

产品描述

<强> CompanyProductLink

CompanyId

产品编号

然后找到所有出售' IC芯片'或'音响系统'的公司: -

SELECT a.CompanyId, a.CompanyName, COUNT(c.ProductId)
FROM Company a
INNER JOIN CompanyProductLink b ON a.CompanyId = b.CompanyId
INNER JOIN ProductTable c ON b.ProductId = c.ProductId AND c.ProductDescription IN ('IC chips','sound system')
GROUP BY a.CompanyId, a.CompanyName

如果您希望公司只销售其中一个' IC芯片'或'音响系统': -

SELECT a.CompanyId, a.CompanyName, COUNT(c.ProductId) AS ProductCount
FROM Company a
LEFT OUTER JOIN CompanyProductLink b ON a.CompanyId = b.CompanyId
LEFT OUTER JOIN ProductTable c ON b.ProductId = c.ProductId AND c.ProductDescription IN ('IC chips','sound system')
GROUP BY a.CompanyId, a.CompanyName
HAVING ProductCount = 1