从另一个表的数组中的table where子句中选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从另一个表的数组中的table where子句中选择相关的知识,希望对你有一定的参考价值。

我正在尝试在代码中插入故障安全措施,以防止它们更进一步,我现在已经摸不着头脑了。我能够将一些东西放入数组中,但是我无法从数组中获取项目以匹配第二个选择查询。我只获取数组而不是项目中的值。

我的第一个选择查询是这样的:

$datohenter3 = "select DATE_FORMAT(datotid, '%Y.%m.%d') AS dato from gramorapport34 group by dato order by dato asc";
$hentdatoer = $db->query($datohenter3);

$periodedatoer = array();
for ($x = 1; $x <= $db->affected_rows; $x++) {
    $periodedatoer[] = $hentdatoer->fetch_assoc();
}

然后我想将此数组中的值与我的下一个select查询匹配:

$rapportdatoer = "select fradato, tildato from gramorapportlogg WHERE  fradato IN('".$periodedatoer."') OR tildato IN('".$periodedatoer."')";
$rapportdatoeksist = $db->query($rapportdatoer);
if ( !$rapporteksist ) die('Database Error: '.$db->error);
    while($row = mysqli_fetch_array($rapportdatoeksist))
     {
        print_r($row);
     } 

我得到的错误是:

注意:第二个选择的数组到字符串转换

数据库错误:您的SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以便在'fradato IN('Array')附近使用正确的语法,或者在第1行使用tildato IN('Array')'

我不是JOIN SELECT查询的专家。这是使用MariaDB 10.3.12和php7.2

var_dump位于:https://www.lokalradio.no/rapport/gramo/datohenttest.php

答案

请注意,$periodedatoer是一个数组数组。里面的每个元素都有一个dato键(正如你var_dump显示的那样)。

因此,使用array-column获取值,然后使用implode

$rapportdato = implode("','", array_column($periodedatoer, "dato"));

现在,您可以在第二个查询中使用$rapportdato

$rapportdatoer = "select fradato, tildato from gramorapportlogg WHERE  fradato IN('" . $rapportdato . "') OR tildato IN('" . $rapportdato . "')";

以上是关于从另一个表的数组中的table where子句中选择的主要内容,如果未能解决你的问题,请参考以下文章

从另一个没有数据的表的结构创建表

如果记录存在则添加 WHERE 子句

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]

WHERE 子句中的 TABLE OF VARCHAR2

JPA 中的条件 where 子句

在 FROM 子句中引用别名为表的其他 SQL SELECT 语句