Mysql 查询从具有 varchar 数据类型的字段中获取记录以存储项目 ID

标签 mysql mysqli

我正在对一些非常旧的现有系统进行修改。

我有 3 张 table 。 tbl_category -> id(int),name(varchar),items(varchar) , tbl_items->id(int),name(varchar) , tbl_groups -> id(int),items(varchar) .

表中tbl_category我将一些来自 tbl_items 的 id 存储在 items field 中. tbl_groups 相同也是。所以现在我只需要从 tbl_category 中找到那些类别。其中包含 tbl_group items 中存在的项目.

这意味着说tbl_category有 2 行有 id='1', items = '1,4,5'id='2',items='4,2,3'
假设我从 tbl_group 中选择了一行有id='6' and items='7,2,3'所以结果将是 id='2', items='4,2,3'因为只有第二行有这些项目 ID。

我无法更改表的结构,因为系统非常旧,这些值被使用了太多次。我希望有一些出路,否则我在这里遇到了严重的麻烦;(:(..

试错:
我试过了:
分解 tbl_group 中的项目。循环遍历数组。并将条件如下:

$sql .= " AND (items like '%,".$items[$k]."' or  items  like '".$items[$k].",%' or items like '%,".$items[$k].",%' or  TRIM(items) like '".$items[$k]."' ) ";

这可行,但我想要比这更好的东西,因为如果 tbl_group 中的项目比我担心的循环和查询开销更多。请有人给我一些建议。

最佳答案

当您有一个逗号分隔的列表时,请使用 FIND_IN_SET() :

FIND_IN_SET(id, items)

关于Mysql 查询从具有 varchar 数据类型的字段中获取记录以存储项目 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558361/

相关文章:

php - 将csv文件上传并导入到mysql中的多个表中

php - 在非对象上调用成员函数 bind_param()

MySQL:使用 .group() 时包含非聚合列错误 | rails 5.2

php - JSON异常: Value of type string cannot be converted to JSON Object?

php - 用户注册成功,但是数据没有存入数据库,没有显示任何错误

php - if 检查双重记录的条件指令

php - mysql num行在ajax调用中不起作用

即使 SQL 失败,PHP 也始终报告 SQL 成功

php - 将 php 变量保存为 sql 的 null

php - 我如何确保我捕捉到来自 MySQLi::multi_query 的所有错误?