簡體   English   中英

mysql - 檢查一組元素是否包含在另一個組中

[英]mysql - check if a group of elements are included in another group

我有以下設置:

像這樣的PHP數組:

 $arr = array(1, 2, 3, 4);

一個如下所示的查詢:

 SELECT `epicThing` FROM `epicTable` AS `epic`
 WHERE
     SELECT `ids` FROM `someTable` 
     WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
     (<<<< HERE IS MY PROBLEM >>>>)

子查詢返回類似(1,2,3,4,5,6,7,8,9)的內容。

現在我需要檢查的是數組中的每個元素都在子查詢的返回答案中。

基本上就像是

 SELECT `epicThing` FROM `epicTable` AS `epic`
 WHERE
     '1' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      )
 AND 
     '2' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      )
 AND
     '3' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      ).......

但對於每個元素。

為簡單起見,我們假設元素總是按順序排列(因為我可能需要將數組轉換為字符串),否則就不可能。 但如果可以的話,我更喜歡一般的解決方案。

我不想做的是在php中獲取數據並在那里檢查(這只是一個非常小的一個巨大的查詢部分)。

如果我正確理解您的問題,我認為這將是您測試數組中所有ID與數據庫中記錄匹配的最簡單方法:

<?php
    $myArray = array(1,2,3);
    $myArrayCount = count($myArray);

    // Convert array for the query
    $queryArray = implode(",", $myArray);

    SELECT COUNT(DISTINCT(YourTable.id)) AS count
    FROM YourTable
    WHERE YourTable.id IN ($queryArray)
    HAVING count = $myArrayCount;

?>

如果HAVING count = $ myArrayCount, Mysql將返回空結果; 與您要檢查的ID數量不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM