代码之家  ›  专栏  ›  技术社区  ›  Andrei Serdeliuc ॐ

选择与多个标记匹配的项目

  •  6
  • Andrei Serdeliuc ॐ  · 技术社区  · 14 年前

    这看起来很基本,但我搞不懂。

    我有一个表“item\u tags”,我想选择所有与标记1和2匹配的项(如中所示,每个项都必须有两个标记)。

    在mysql中如何实现这一点?

    CREATE TABLE `item_tags` (
      `uid_local` int(11) NOT NULL DEFAULT '0',
      `uid_foreign` int(11) NOT NULL DEFAULT '0',
      `sorting` int(11) NOT NULL DEFAULT '0',
      KEY `uid_local` (`uid_local`),
      KEY `uid_foreign` (`uid_foreign`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  12
  •   OMG Ponies    14 年前

    用途:

      SELECT i.uid
        FROM ITEMS i
        JOIN ITEM_TAGS it ON it.uid_local = i.uid
                       AND it.uid_foreign IN (1, 2)
    GROUP BY i.uid
      HAVING COUNT(DISTINCT it.uid_foreign) = 2
    

    您需要定义GROUPBY和HAVING子句,并且不同标记ID的计数必须等于您在in子句中指定的标记数。

        2
  •  0
  •   Gabriel Sosa    14 年前

    像这样的?

    SELECT i.* from items i inner join items_tags it
    on i.id = it.item_id
    inner join tags t
    on t.id = it.tag_id
    WHERE t.name in ('tag1', 'tag2');
    

    编辑:

    支持您将items\u tags:(item\u id,tag\u id)作为表