2014-03-13 177 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

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