【发布时间】:2018-11-25 13:29:42
【问题描述】:
我有两边逗号分隔的值,比如
$ing=1,2,3,4,5,6
并且数据库有一个带有值的表
IDS 5,2,1,6,2,3,45 // in database
我知道这不是一个好习惯,但我必须这样做才能在一个查询中获取值。我还有一个单独的表,其中 IDS 是单独的,并且对应于单独的用户,例如
user 1 IDS 2
user 3 IDS 65 etc
目前我正在使用
$conditions[] = "CONCAT(',', `rcring`, ',') REGEXP ',($ing),'";
它给了我很好的结果,但它给了我存在任何 $ing 的值我只想要至少具有所有 $ing 的表
您能帮帮我吗?我尝试了我的工作,但在任何地方都找不到合适的解决方案。谢谢。
//EDIT
我已经有条件作为一个数组
if($ser !=''){
$conditions[] = "rc_ser='$ser'";
}if($fridge == 1){
$ing="0|";
$ctch2fr='checked';
foreach($_SESSION['fridge'] as $item){
$ing=$ing.$item."|";}
$conditions[] = "CONCAT(',', `rcring`, ',') REGEXP ',($ing),'";
}
if (count($conditions) > 0) {
$sql= implode(' AND ', $conditions);
}
像这样作为数组中的条件,我在查询中这样称呼它
select * ,(select count(rcid) from recipe where ($sql)) as total from recipe where ($sql)
我尝试了下面的答案,但它总是给我 0 结果 当我打印查询时,它会像这样显示我
select *,(select count(rcid) from recipe where (CONCAT(',', `rcring`, ',') REGEXP ',(0),') ) as total from recipe where (CONCAT(',', `rcring`, ',') REGEXP ',(0),')
【问题讨论】:
-
1.删除
$conditions附近的[]2. 你能用var_dump($conditions);告诉我你的结果吗? -
您能否展示一个表格示例和您想要作为输出的数据?
-
在数据库列中存储分隔列表真的那么糟糕吗? 是的,就是这么糟糕 stackoverflow.com/a/3653574/2739274
-
我怀疑这句话的真实性“我知道这不是一个好的做法,但我必须这样做才能在一个查询中获取值”,你能扩展一下吗?