【问题标题】: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 内部。

我怎样才能做到这一点?

【问题讨论】:

  • 看到这个sql_in
  • 那么我应该使用 SELECT * FROM files WHERE subject_code IN ('".$result."')"); 应该使用 mysql fetch 数组吗?
  • 在下面查看我的答案。我已经更新了它,因为结果是一个关联数组。
  • 好的,我已经添加了一行来将对象类型转换为数组。

标签: php mysql sql


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2018-10-27
      • 1970-01-01
      • 2019-04-08
      • 2020-06-15
      相关资源
      最近更新 更多