带有where子句IN implode的SQL多连接

时间:2016-02-29 14:36:34

标签: sql

我有这个SQL查询

$pole = array();
$pole[] = "test1";
$pole[] = "test2";

$pocet_k = count($pole);

    $query = "Select * from kategorie join recepty on recepty.kategorie_idkategorie=kategorie.idkategorie join druhy on druhy.iddruhy = recepty.druhy_iddruhy join recepty2suroviny on recepty_idrecepty=idrecepty join suroviny on idsuroviny=suroviny_idsuroviny WHERE suroviny.nazev_suroviny  IN (".implode(",", array_map("mysql_real_escape_string", $pole)).") group by idrecepty having count(*)"."="."'$pocet_k'"." "."and druhy.iddruhy=recepty.druhy_iddruhy 
    order by recepty.nazev_receptu";

我收到错误Unknown column 'test1' in 'where clause'我不知道如何解决它: - /

2 个答案:

答案 0 :(得分:0)

我尝试了" . $pocet_k . "和其他未成年人..

$pole = [];
$pole[] = ["test1"];
$pole[] = ["test2"];

$pocet_k = count($pole);

$query = "Select * from kategorie 
join recepty on recepty.kategorie_idkategorie=kategorie.idkategorie 
join druhy on druhy.iddruhy = recepty.druhy_iddruhy 
join recepty2suroviny on recepty_idrecepty=idrecepty 
join suroviny on idsuroviny=suroviny_idsuroviny 
WHERE suroviny.nazev_suroviny  IN (" . implode(",", array_map("mysql_real_escape_string", $pole)).") 
group by idrecepty 
having count(*) =  " . $pocet_k . " and druhy.iddruhy=recepty.druhy_iddruhy 
order by recepty.nazev_receptu";

答案 1 :(得分:0)

我认为问题在于

部分
IN (".implode(",", array_map("mysql_real_escape_string", $pole)).")

结果是

IN (test1, test2)

其中test1test2引用列,而您希望它们引用文字,即

IN ('test1', 'test2')

那么可能对您有用的是将该部分重写为

IN ('" . implode("','", array_map("mysql_real_escape_string", $pole)) . "')

使用','加入所有元素,并将结果包装在'中以获取边缘情况。

但你真的应该考虑使用绑定