Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL查询从多ID数组获取类别名称_Php_Mysql - Fatal编程技术网

PHP MySQL查询从多ID数组获取类别名称

PHP MySQL查询从多ID数组获取类别名称,php,mysql,Php,Mysql,我有分类表tb\u分类 categoryid | category_name 1 | New Product 2 | Promo 我有产品表tb\u产品 productid | product_name | categoryid_fk 1 | Watch | 1 2 | Bag | 1,2 现在我想从productid=2中获取类别名称,其中categoryid\u fk=1,2 怎么做 到目

我有分类表
tb\u分类

categoryid | category_name
1          | New Product
2          | Promo
我有产品表
tb\u产品

productid | product_name | categoryid_fk
1         | Watch        | 1
2         | Bag          | 1,2
现在我想从
productid
=2中获取类别名称,其中
categoryid\u fk
=1,2

怎么做

到目前为止,我的SQL代码:

//category id --> 1,2
$qCategory = mysqli_query($con, "SELECT * FROM tb_category WHERE categoryid IN ('" . $dProduct['categoryid_fk'] . "')");
foreach($qCategory as $cause)
{
    echo $cause['category_name'];
}

当我运行查询时,我只获得带有单个
categoryid

的类别名称,并使用find\u in\u set函数。用法:在集合中查找(搜索字符串,字符串列表)。 请参见此处的演示:

编辑:由于需求已更改,请添加替换函数以删除空格,以便在_集中查找_

SELECT tb_category.*  
FROM tb_category,tb_product 
WHERE find_in_set(categoryid, replace(categoryid_fk,' ','')) > 0
and productid = 2;

Result:
categoryid  category_name
1           New Product
2           Promo

您需要将tb_product-table加入到您的query@Bernhard你有一个例子吗?你需要规范化,创建
tb|u prod|u cat
来连接
productid
categoryid
上的这些表,并且将有3行:
1
-
2 | 1
2 | 2
。然后加入
tb\u产品
tb\u产品猫
tb\u类别
。categoryid\u fk定义为集合还是varchar?请告诉我们tb_产品是如何生产的created@tadman好的。我明白你的话了。(y) 尝试了你的代码,但只显示了1个类别。你复制并粘贴了我的代码吗?它在sqlfiddle中运行良好,结果在我答案的底部。是的,刚刚尝试过。我仍然只有一个类别。你能分享一下你的sqlfiddle吗?我更新了我的答案,把sqlfiddle放进去:刚才试过了,我发现了问题<代码>(2,'Bag','1,2')。当我这样设置时
(2,'Bag','1,2')