如何为元素数组动态创建查询?

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 控件的视图

如何为动态字段Angular 4创建表单生成器?

如何为静态数组创建我的个人 ToList() 函数

如何为 django 模板中的标签创建动态 id

在 Flutter 中,如何为 Card 中的子元素动态分配高度?

如何为 Handsontable 创建动态列?