我正在对一些非常旧的现有系统进行修改。
我有 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/