我将json发送到服务器,如下所示:
{"data":{"tags":[{"tag":"Paris"},{"tag":"New York"},{"tag":"London"}]},"terms":{"term":"index"}}
...和foreach()我将提供的标签附加到查询中:
$query = "SELECT name FROM accounts
WHERE name = '".$term."'";
foreach($tags as $t=>$tag){
$tag = $tag['tag'];
$query.=" AND city = '".$tag."'";
}
...复制这个:
SELECT name FROM accounts
WHERE name=$term
AND city=$tag
AND city=$tag
AND city=$tag;
但是如果我想提供复制,foreach()应该如何:
SELECT name FROM accounts
WHERE name=$term
AND (city=$tag OR city=$tag OR city=$tag);
答案 0 :(得分:1)
在查询和IN clause函数中使用implode形成它的更好方法是:
$tags_list = array();
foreach($tags as $t=>$tag){
$tags_list[] = $tag['tag'];
}
$query = "SELECT name FROM accounts
WHERE name = '".$term."'";
if ($tags_list) {
$query .= " AND city IN ('".implode("', '", $tags_list)."')";
}
答案 1 :(得分:0)
问题在于,在sql查询中,列名不能同时包含2个标记。例如
WHERE name = true AND name = false
没有任何意义。
所以你应该使用这样的东西
WHERE name in ($tag, $term, $tag2);
因此你应该调整你的PHP代码
$first = true;
$query = "SELECT name FROM accounts
WHERE name2 = '$term' and name in ("
foreach($tags as $t=>$tag){
$tag = $tag['tag'];
if($first == false) {
$query.=",";
}
$query.="'".$tag."'";
$first = false;
}
$query.=")";