Php SQL中的Where条件置换
我想选择那些只包含“1”和“2”以及“1,2”和“2,1”的记录Php SQL中的Where条件置换,php,sql,permutation,comma,separator,Php,Sql,Permutation,Comma,Separator,我想选择那些只包含“1”和“2”以及“1,2”和“2,1”的记录 关于从jarlh 您可以使用列创建新表jobs\u image: id - primary id_job id_image 并选择using join作为示例: SELECT * FROM `jobs` LEFT JOIN `jobs_images` ON (`jobs_images`.`id_job`=`jobs`.`id`) WHERE `jobs_images`.`id_image` IN (1,2,3) 最后,我使用
关于从
jarlh
您可以使用列创建新表jobs\u image
:
id - primary
id_job
id_image
并选择using join作为示例:
SELECT * FROM `jobs` LEFT JOIN `jobs_images` ON (`jobs_images`.`id_job`=`jobs`.`id`)
WHERE `jobs_images`.`id_image` IN (1,2,3)
最后,我使用这段代码进行了查询。我决定按顺序格式在图像字段中存储一个数据
<?php
echo "<pre>";
$str = "1,2,3";
function getCombinations($array) {
//initalize array
$results = [[]];
//get all combinations
foreach ($array as $k => $element) {
foreach ($results as $combination)
$results[] = $combination + [$k => $element];
}
//return filtered array
return array_values(array_filter($results));
}
$arr = getCombinations(explode(",", $str));
$lastElement = end($arr);
foreach($arr as $v){
$sep=",";
if($lastElement == $v){
$sep='';
}
$condition .= "'".implode(",", $v)."'".$sep;
}
echo $qry = "select * from job_detail where image in (".$condition.")";
?>
试试这个:图像位于(“1”、“2”、“1,2”、“2,1”)
但是如果我想选择一个包含“1,2,3”的图像,那么我必须写它们的排列。所以我想让它在所有条件下都是动态的。对于字段的未排序逗号分隔值设计,按照Veniamin的建议,对所有组合进行精确匹配是使用索引的唯一方法。我建议你要么规范化你的表,要么在更新/插入时对你的数字进行排序,这样你就可以得到一个精确的匹配项进行搜索。不要将数据存储为逗号分隔的值。。。这只会给你带来很多麻烦。你用的是哪种数据库管理系统?(我同意Joachim和jarlh的观点:不要在一列中存储逗号分隔的值)