【问题标题】:How to select record matchin all parameters?如何选择所有参数匹配的记录?
【发布时间】:2016-02-03 10:01:38
【问题描述】:

我有表 catalog_view。 I 包含具有指定类别的联系人。联系人可以有多个类别。我要选择联系人,属于所有按用户类别选择的联系人

e.g contact "Jone" belongs to categories [1,2,3,4,5,6] and contact "Jay" belongs to categories [1,3]. If user select categories [2,3], only "Jone" should be returned, if [1]|[3]|[1,3] selected, both should be returned, if [7]|[1,7] selected, none should be returned. 

我应该如何构建查询和/或更改表来实现它?

按单个类别选择联系人的查询

SELECT * FROM catalog_view WHERE (category_id = ?)

如果分配的类别与其中任何一个匹配,则此查询选择记录并返回联系人行数,最多可包含参数数量,而且它们不会强制选择所有这些。

SELECT * FROM catalog_view WHERE (category_id = ? OR category_id = ? OR category_id =?)

此查询总是返回空表,因为 catalog_view 的当前模板中的行只有一个 category_id

SELECT * FROM catalog_view WHERE (category_id = ? AND category_id = ? AND category_id =?)

联系人

CREATE TABLE IF NOT EXISTS contacts_table(_id integer primary key, title text default '',title_lower text default '',title_short text default '',photo blob, number text default '', note text default '', note_lower text default '', email text, partner int default '0', contact_id int default '0', current_user text default '', categories text default '', saved integer default '0' );

分类

CREATE TABLE IF NOT EXISTS categories_table(_id integer primary key, category_id integer, parent_id integer, name text, section_name text, current_user text, sub_name text default '' );

类别的联系人

CREATE TABLE IF NOT EXISTS contacts_categories_table(_id integer primary key, contact_id integer, category_id integer, current_user text );

目录查看联系人

CREATE VIEW IF NOT EXISTS catalog_view AS  SELECT contacts_table._id AS _id, contacts_table.contact_id, contacts_table.title_lower, contacts_table.note_lower, contacts_table.current_user, contacts_table.saved, contacts_table.partner, contacts_table.title, contacts_table.email, contacts_table.title_short, contacts_table.number, contacts_table.note, contacts_table.categories, categories_table.section_name, contacts_table.contact_id, categories_table.parent_id, categories_table.category_id  FROM contacts_categories_table INNER JOIN contacts_table ON(contacts_categories_table.contact_id = contacts_table.contact_id AND contacts_categories_table.current_user = contacts_table.current_user)  LEFT OUTER JOIN categories_table ON(contacts_categories_table.category_id = categories_table.category_id AND contacts_categories_table.current_user = categories_table.current_user) 

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    你可以试试这样的:

    SELECT distinct name from catalog_view s
    where NUMBER_OF_CONTACT_SELECTION =
          (SELECT count(*) from catalog_view t
          where t.name = s.name and
          category_id in(YOUR CONTACT SELECTION HERE IN FORMAT OF 1,3,4...)) 
    

    所以对于 1,3,您的查询应该是:

    SELECT distinct name from catalog_view s
    where 2 =
          (SELECT count(*) from catalog_view t
          where t.name = s.name and
          category_id in(1,3)) 
    

    对于 1,2,4,7 它应该是 -> 4 = (.....IN(1,2,4,7))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多