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

时间:2019-01-27 15:12:05

标签: php mysql arrays mysqli

我正试图在代码中插入故障保险,以防止它们进一步发展,而且我已经摸索了一段时间。我可以将某些东西放入数组中,但是无法从数组中获取项目以匹配第二个选择查询。我只会得到Array而不是项目中的值。

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

$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();
}

然后我要将该数组中的值与下一个选择查询匹配:

$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服务器版本相对应的手册以获取正确的语法,以在第1行的'fradato IN('Array')或tildato IN('Array')'附近使用

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

var_dump可通过以下网址获得:https://www.lokalradio.no/rapport/gramo/datohenttest.php

1 个答案:

答案 0 :(得分:0)

请注意,$periodedatoer是一个数组数组。内部的每个元素都有1个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 . "')";