Php MySQL字符串到表达式的转换

Php MySQL字符串到表达式的转换,php,mysql,sql,string,Php,Mysql,Sql,String,我有一个MySQL例程具有以下条件: Where category like CONCAT("%",@category,"%") …这适用于单一类别 现在我想与多个类别进行比较,我尝试从PHP构建字符串(字符串连接),但它不起作用(在Mysql例程中) 如何将此条件转换为匹配多个LIKE表达式?假设您的类别列类似:“猫、狗、大象”;分离关键字。有3种解决方案: 1)最丑陋的解决方案,可能是最糟糕的: WHERE category like CONCAT("%",@category1,"%")

我有一个MySQL例程具有以下条件:

Where category like CONCAT("%",@category,"%")
…这适用于单一类别

现在我想与多个类别进行比较,我尝试从PHP构建字符串(字符串连接),但它不起作用(在Mysql例程中)


如何将此条件转换为匹配多个LIKE表达式?

假设您的类别列类似:“猫、狗、大象”;分离关键字。有3种解决方案:

1)最丑陋的解决方案,可能是最糟糕的:

WHERE category like CONCAT("%",@category1,"%") 
OR category like CONCAT("%",@category2,"%")
但是对于这个,你应该知道你要查询多少个类别。这种方法可能根本不起作用

2)如果是myisam表,您可以使用它来匹配类别字段,这将比第一个选项更快、更整洁

3)最好的方法是重新设计表结构,在类别和主题项之间建立一个关系表(因为它看起来像一个1-N关系)


如果您能给出一些有助于理解的定义(代码)和数据示例。

请粘贴您尝试的字符串连接。您必须解释如何存储
类别
值——看起来您将大量类别词放入一列中(我们称之为“非规范化数据”——不太好。)怎么样?我在例程中更改了条件,比如“Where@category”,并通过了“category like”%cat1%”或“cat2%”之类的类别。但它不起作用。。。我猜MySQL例程将参数作为类似于“Where{string}”的字符串……如何将多个类别值传递给@category?