匹配数组php中的所有值

时间:2014-04-07 21:14:54

标签: php

用户可以使用选择和复选框表单搜索某些内容。数据以GET变量发送。 我收集了变量中的所有可能值并将其放入数组中:     $term_taxomony_ids_array = array($term_taxonomy_id_m, $term_taxonomy_id_l, $term_taxonomy_id_t_1, $term_taxonomy_id_t_2, $term_taxonomy_id_t_3, $term_taxonomy_id_t_4, $term_taxonomy_id_t_5, $term_taxonomy_id_t_6, $term_taxonomy_id_t_7, $term_taxonomy_id_t_8); 的print_r($ term_taxomony_ids_array);然后会给 例如:

Array (
    [0] => 12
    [1] => 14
    [2] =>
    [3] =>
    [4] => 9
    [5] =>
    [6] => 2
    [7] =>
    [8] =>
    [9] =>
)

如何使这个数组更简单但完全省略空结果(如评论中所示)? 我需要在数据库中找到符合所有所选条件的“地点”。 我的数据库表已设置好,因此我有两列。 1. Object_id 2. term_taxonomy_id。 term_taxonomy_id是数组中的值。 例如我的表看起来像这样

Object id  term_taxonomy_id
    2            12
    2             3
    3            12
    3            14
    3             9
    3             2
    4             5
    5             9

所以只有object_id'3'匹配数组中的所有术语 - 12,14,9,2 如何运行查询以查找此结果? 我正在使用一个mysql数据库,phpmyadmin和我的网站建立在wordpress上。 感谢

2 个答案:

答案 0 :(得分:4)

基本上:

SELECT objectID, COUNT(term_taxonomy_id) AS cnt
FROM yourtable
WHERE term_taxonomy_id  IN (2, 9, 14, 12)
GROUP BY objectID
HAVING cnt = 4

查找具有一个或多个匹配分类标识ID的所有objectID,但只返回具有四个匹配分类标识ID的对象标识。

答案 1 :(得分:3)

使用IN,结合COUNT()和/ GROUP。

$array = array_filter(array_unique($array));
$count = count($array);
$sql = "SELECT id, COUNT(*) FROM table WHERE field IN (" . implode(',', $array) . ") GROUP BY id HAVING COUNT(*) = " . $count;

SQL可能有点过时(您可能需要重新订购has和group)。