在查询中匹配数组的元素

时间:2012-01-26 02:03:12

标签: mysql sql

我想仅在$arr_tags匹配所有array_elements with tags_is_tags时才选择帖子。例如,在这种情况下将输出0个帖子,因为一个数组元素与tags_id_tags

不匹配

我该怎么办?

$arr_tags = array("16", "17", "36", "543"); // the dimension is not always the same

post_id_post        tags_id_tags    
    282                      16     
    282                      17     
    282                      36 
    282                      546 

我有这段代码,但查询没有完成。

            $sql = $db -> prepare("
                SELECT post_id_post 
                FROM posts
                // ...
            ");

            $sql -> bind_param('s', $val);
            $sql -> execute();
            $sql -> bind_result($d_post);

感谢您的时间

2 个答案:

答案 0 :(得分:4)

  SELECT post_id_post
    FROM posts
   WHERE tags_id_tags IN ("16", "17", "36", "543")
GROUP BY post_id_post
  HAVING COUNT(*) = 4

您将所有必需标记的ID放在IN子句中,并将COUNT(*) = 4表达式中的数字更改为传递的标记数

答案 1 :(得分:0)

在我看来,你想知道如何提出正确的问题。这里的魔术词是“关系分裂”。

它是Coddrelational algebra中的运算符之一,自此以后提出了一些变体。最近,Chris Date建议用image relations替换整个概念。

SQL没有明确的除法运算符。有许多使用其他运算符的变通方法,最合适的将取决于您的要求,包括对余数的精确除法或除法以及如何处理空除数。然后有通常的考虑因素:SQL产品和版本,性能,个人风格和品味等。

以下是一些可以帮助您做出这些选择的文章:

On Making Relational Division Comprehensible

Divided We Stand: The SQL of Relational Division