如何为元素数组动态创建查询?
Posted
技术标签:
【中文标题】如何为元素数组动态创建查询?【英文标题】:How to create a query dynamically for an array of elements? 【发布时间】:2017-12-11 16:20:40 【问题描述】:我有一个基本查询如下
$query = "SELECT * FROM files WHERE (subject_code = '".$subject_code."' )";
我必须修改此查询以创建一个查询,其中我们从一个数组中获取多个主题代码。
$query1="SELECT subject_code FROM subject WHERE (sbranch = '".$branch."' )";
$result = mysqli_query($bmysqli, $query1);
现在结果包含所有必需的 subject_codes
比如说 result[0]=SC1
,result[1]=SC2
等等......
现在我想对原始查询进行如下修改
$query = "SELECT * FROM files WHERE (subject_code = SC1 OR subject_code = SC2 .....)";
请注意,我不知道 SC1 SC2 等的值是什么。它取决于分支并且在 $result
内部。
我怎样才能做到这一点?
【问题讨论】:
***.com/questions/20203063/mysql-where-id-is-in-array 看到这个sql_in 那么我应该使用 SELECT * FROM files WHERE subject_code IN ('".$result."')"); 应该使用 mysql fetch 数组吗? 在下面查看我的答案。我已经更新了它,因为结果是一个关联数组。 好的,我已经添加了一行来将对象类型转换为数组。 【参考方案1】:您可以像这样使用子查询:
$query = 'SELECT * FROM files
WHERE subject_code IN (
SELECT subject_code FROM subject WHERE sbranch = "' . $branch . '"
)';
【讨论】:
哇,漂亮的答案。 我不知道该如何感谢你,我为此工作了几个小时,你提供了一个简单的解决方案.. 很高兴我能帮上忙 :)【参考方案2】:您可以使用 implode 将数组转换为以逗号分隔的字符串
如下:
$branch_array = array('subject1', 'subject2', 'subject3');
$branch = implode("','", $subject_array );
$query1="SELECT subject_code FROM subject WHERE sbranch in ('".$branch."')";
结果:
'subject1', 'subject2', 'subject3'
希望能解决您的问题
【讨论】:
【参考方案3】:你可以使用Mysql In 操作符 像这样
SELECT * FROM files WHERE subject_code in ('SC1','SC2')";
你可以使用implode php函数实现('SC1','SC2')
,
像这样:
$subCodes = implode("','", $subject_array );
SELECT * FROM files WHERE subject_code in ('".$subCodes ."')"
【讨论】:
但我不知道 SC1,SC2 在 $result 中。如何将 $result 转换为上述格式?【参考方案4】:$query1="SELECT subject_code FROM subject WHERE (sbranch = '".$branch."' )";
$result = mysqli_query($bmysqli, $query1);
$codes=(array)$result; //this will convert it in normal array. old school typecasting ;)
$codes=array_values($codes);
$query = "SELECT * FROM files WHERE subject_code in (".implode(",",$codes).")";
//considering result is an object of subject codes.
代码已更新,因为它是一个对象。
您不需要附加到第一个查询。只需使用 MySQL in operator 和 php implode 函数构建一个新查询。
【讨论】:
这不起作用,因为 $result 是关联数组。你能帮我解决这个问题吗.. 编辑了答案。如果可行,请将我的答案标记为正确。谢谢:) 错误 array_values() 期望参数 1 是数组,给定对象 在所有答案中,这正是我想要的,但仍然无法使其发挥作用.. 所以当你说它是一个关联数组时,它不是。它是一个对象。答案再次更新。【参考方案5】:SELECT * FROM files WHERE subject_code in ('SC1','SC2')
【讨论】:
但我不知道 SC1,SC2 在 $result 中。如何将 $result 转换为上述格式? $ids = join("','",$arrayOfValues); $sql = "SELECT * FROM files WHERE subject_code IN ('$ids')";【参考方案6】:您可以将您的 php 数组修改为以逗号分隔的 SubjectCodes 字符串。
然后:
$query1="SELECT * FROM files WHERE subject_code in (".$NewString.") ";
$NewString 看起来像这样:
"'SC1', 'SC2', 'SC3'"
【讨论】:
$result 数组有主题但如何将 $result 转换为上述格式? @ElectronicsForKTU 内爆(“,”,$YourArray)【参考方案7】: $result = array(0=>'SC1',1=>'SC2'); //this is your array
$branch = implode("','", $result );
$query .= "
SELECT * FROM files WHERE subject_code in ('".$branch."') "; //this is query
【讨论】:
以上是关于如何为元素数组动态创建查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 iOS 应用动态设计或创建带有动态 ui 控件的视图