2014-03-13 216 views
0

我有一个多选功能,允许用户标记公司的服务。而在我的数据库中,我有一个只有id和这些服务名称的表。我试图做的是创建一个语句,用于搜索标签是否已经存在,如果它不存在,那么创建它。有人能帮我设置这个的逻辑吗?MYSQL比较数组与数据库表

我只是不知道如何去搜索一个数组的表列。

感谢

$company_type = implode(',', $company_type); 
$lookup_tags = "SELECT * FROM table WHERE company_type_id = ?"; 
    $q_lookup_tags = $conn->prepare($lookup_tags); 
    $q_lookup_tags -> execute(array($company_type)); 

如何进行选择,结果到现有的和非现有的IDS排序?

感谢

回答

0
$query = ""; 
$i = 0; 
foreach($company_type as $key=>$type){ 
    $query.="SELECT $type as type, count(*) as total,* FROM table WHERE company_type_id = ".intval($type); 
    if($i < count($company_type)){ 
     $query.=" UNION "; 
    } 
    $i++; 
} 

$q_lookup_tags = $conn->prepare($query); 
$q_lookup_tags -> execute(); 
+0

只是关于问题的第二部分我将如何去分类现有和不存在的标签?通常我在select语句之后执行行计数以查看它是否存在,但我从来没有试过在 – Owen

+0

之前传递数组,您可以使用mysql union语句并编写查询。我会编辑我的帖子,给我一秒钟。 –

1

MySQL的in运营商是你的朋友在这里:

$lookup_tags = "SELECT * FROM table WHERE company_type_id in ($company_type)"; 

,但如果你使用PDO预处理语句,你需要手动过滤

编辑

$placeHolders=implode(',',array_fill(0,count($company_type),'?')); 
$lookup_tags = "SELECT * FROM table WHERE company_type_id in ($placeHolders)"; 
$qry= $conn->prepare($lookup_tags); 
$qry->execute(array_values($company_type)); 
+0

这是不安全的。 –

+0

我在原始答案中指出了这一点。使用更安全的版本编辑 – andrew

+0

更安全的版本无法正常工作。 –