我正在尝试访问包含所有数字的ring_to_number
from 。tbl_destinations
并且字段destinations
具有逗号分隔的 ID,例如1,3
. 但根据这个查询,我只得到了 id 的结果,1
我没有得到 id 的结果3
。
SELECT count( id ) AS totalDestination, group_concat( ring_to_number ) AS phoneNumbers
FROM tbl_destinations
WHERE id
IN (
SELECT destinations
FROM tbl_rings_to_groups
WHERE id = '1'
AND user_id = '1'
)
谁能告诉我为什么我没有在 SubQuery 中得到destinations
=> ?1,3
tbl_rings_to_groups:
tbl_destinations:
您不会得到结果,因为两个表的 id 的数据类型不同,因此无法进行比较(as
1 != '1'
)。试试这个:子查询...
...返回一个包含“1, 3”的字符串。
然后,将此子字符串与字段“id”进行比较,我假设它是整数类型。也许 mysql 做了某种隐式转换,所以你看到的 "1" 只是将字符串(varchar) "1, 3" 转换为integer的结果。
正确答案在评论中:您必须更改架构以考虑目的地的多重基数。
首先,修复您的架构。尽早。绝对没有理由将逗号分隔的列表存储在表格列中。恰恰相反,有很多理由不这样做。有关详细说明,请参阅这些答案:
使用逗号分隔的多个外键是否错误,如果是,为什么?
( @Simon Righarts)
在数据库列中存储分隔列表真的那么糟糕吗?
( @比尔卡尔文)
同时,您可以使用此查询,该查询使用以下
FIND_IN_SET()
功能:但是修复/规范化您的架构应该是您的首要任务。