【问题标题】:separated by commas fro search [closed]用逗号分隔搜索[关闭]
【发布时间】:2013-07-03 09:44:52
【问题描述】:

我正在创建一个名为 company_Registration 的表,用于存储

company_id  
company_name  
product_escription  

---使用php和mysql---

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

并且应该用逗号分隔..

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

但是,我想当用户在网页中搜索时product_description列的值应该被视为用逗号分隔如何实现?

【问题讨论】:

  • 不要这样做!!您正在射击自己的脚,但现在不会注意到它。始终保持数据库标准化。 databases.about.com/od/specificproducts/a/normalization.htm
  • product_description 列值应被视为用逗号分隔,因为 product_description 的基础将用逗号分隔....
  • 我得到的解决方案是为 companyid 和 productid 制作一个单独的表并执行连接操作..整个过程由 kickstart 解释..

标签: php mysql csv


【解决方案1】:

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

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

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

例如,简单的表格

公司表

公司编号

公司名称

产品表

产品编号

产品说明

CompanyProductLink

公司编号

产品编号

然后查找所有销售“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

【讨论】:

  • 我想我想要这个,但是当用户输入例如 IC 芯片、直流电机进行搜索但可能有公司提供或不提供这两者取决于但用户应该得到输出但公司表将输入作为 Product_description即如果这里写的是IC芯片,音响系统那么IC芯片是常见的,所以检索相应的公司名称..
  • 您只需加入即可。我会更新我的答案。
猜你喜欢
  • 2018-12-18
  • 2018-12-08
  • 2013-07-03
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多