-1

(已编辑)

表“公司”:公司->“示例LTD”类别(Varchar)->“1,2,3,4”

当访问者选择查看类别编号为“1”的公司时,应显示“Example LTD”(也在 2,3 和 4 中)

我想 SELECT * FROM 公司 WHERE 类别(例如包含类别编号 1)有什么想法吗?

4

1 回答 1

3

SELECT * FROM companies WHERE categories IN (1,3,6,9)

您可以在 php 中动态生成 IN-list:

$cats = join(',',$categories);  
$sql = "SELECT * FROM companies WHERE id IN ($cats)";

但是请确保您的 $categories 数组是未受污染的(仅包含安全数据,以防止 MySQL 注入)!

更新

您将类别存储在一个 CSV 字段中?哎哟!

好吧,如果用户只能选择一个类别,请使用 FIND_IN_SET:

SELECT * FROM companies WHERE FIND_IN_SET(categories,1)

有多个类别,没有这样的事情。使用循环生成不同的 FIND_IN_SET,以 . 分隔AND

请标准化您的数据:

上桌公司:

  • 公司编号
  • 公司名称

以及类别的链接表:

  • 链接ID
  • 公司编号
  • 类别
于 2012-07-05T12:39:40.970 回答