Php 从Transion表中选择匹配记录的exect

Php 从Transion表中选择匹配记录的exect,php,mysql,Php,Mysql,大家好,我有一个表,它有两列trial\u id,category\u id SELECT q.* FROM ( SELECT *,COUNT(trial_id) as tcount FROM trial_category WHERE category_id IN ( 259, 260 ) GRUOP BY trial_id ) q WHERE q.tcount >1 我附加的图像,使它变得更清晰 当我想要trial\u id的记录,这些记录具有category\u id时,我可以运行

大家好,我有一个表,它有两列
trial\u id
category\u id

SELECT q.* FROM (
SELECT *,COUNT(trial_id) as tcount FROM trial_category 
WHERE category_id IN ( 259, 260 ) GRUOP BY trial_id ) q
WHERE q.tcount >1
我附加的图像,使它变得更清晰

当我想要
trial\u id
的记录,这些记录具有
category\u id
时,我可以运行如下查询

 SELECT * FROM `trial_category` WHERE category_id IN ( 259, 260 )
您可以将其与这两个
category\u id

SELECT q.* FROM (
SELECT *,COUNT(trial_id) as tcount FROM trial_category 
WHERE category_id IN ( 259, 260 ) GRUOP BY trial_id ) q
WHERE q.tcount >1
我的问题是,现在我想要与这两个
类别id完全匹配的
试用id
,我该怎么办

意味着如果您注意到只有
试验id
73同时具有259和260
类别id
,那么我的结果应该只有73


谢谢

您需要使用
分组方式
进行
试用id

SELECT trial_id, count(trial_id) AS ccnt
FROM trial_category
WHERE category_id IN ( 259,260)
GROUP BY trial_id
HAVING ccnt = 2
SELECT q.* FROM (
SELECT *,COUNT(trial_id) as tcount FROM trial_category 
WHERE category_id IN ( 259, 260 ) GRUOP BY trial_id ) q
WHERE q.tcount >1


您需要使用
groupby
进行
trial\u id

SELECT q.* FROM (
SELECT *,COUNT(trial_id) as tcount FROM trial_category 
WHERE category_id IN ( 259, 260 ) GRUOP BY trial_id ) q
WHERE q.tcount >1

使用GROUPBY子句:

SELECT trail_id FROM `trial_category` 
WHERE category_id IN ( 259, 260 ) 
GROUP BY trial_id
HAVING count(trial_id) = 2
使用GROUPBY子句:

SELECT trail_id FROM `trial_category` 
WHERE category_id IN ( 259, 260 ) 
GROUP BY trial_id
HAVING count(trial_id) = 2
这是“集合中的集合”子查询的一个示例。下面是一个使用
groupby
having
子句的解决方案:

SELECT trial_id
FROM trial_category
group by trial_id
having sum(case when category_id = 259 then 1 else 0 end) > 0 and
       sum(case when category_id = 260 then 1 else 0 end) > 0;
当其中一行具有特定类别时,满足
having
子句中的每个条件。您可以看到,这很容易推广到更多类别。甚至是259号案件,而不是260号和261号案件

如果您恰好需要这两个类别,可以通过添加以下子句对没有任何其他类别的行进行筛选:

       sum(case when category_id not in (259, 260) then 1 else 0 end) = 0;
在(259260)

中,这是“集合中的集合”子查询的示例。下面是一个使用
groupby
having
子句的解决方案:

SELECT trial_id
FROM trial_category
group by trial_id
having sum(case when category_id = 259 then 1 else 0 end) > 0 and
       sum(case when category_id = 260 then 1 else 0 end) > 0;
当其中一行具有特定类别时,满足
having
子句中的每个条件。您可以看到,这很容易推广到更多类别。甚至是259号案件,而不是260号和261号案件

如果您恰好需要这两个类别,可以通过添加以下子句对没有任何其他类别的行进行筛选:

       sum(case when category_id not in (259, 260) then 1 else 0 end) = 0;
在(259260)中试试这个

  SELECT DISTINCT trail_id FROM `trail_category` WHERE category_id IN ( 259, 260 );
试试这个

  SELECT DISTINCT trail_id FROM `trail_category` WHERE category_id IN ( 259, 260 );


分组方式。。。HAVING COUNT(*)=in()中的项目数谢谢,你能给我那个mysql查询吗。No。我相信其他人会同意的,但我认为自己采取一些措施很重要,那类别id=259和类别id=260;分组方式。。。HAVING COUNT(*)=in()中的项目数谢谢,你能给我那个mysql查询吗。No。我相信其他人会同意的,但我认为自己采取一些措施很重要,那类别id=259和类别id=260;如果它只匹配一个类别,这仍然会给出trail_id。我想这可能不是他的问题的答案。即使73匹配一个类别id,它也会显示在结果中。如果它只匹配一个类别id,这仍然会给出线索id。我认为这可能不是他的问题的答案。即使73匹配一个类别id,它也会显示在结果中。如果它只匹配一个类别id,它仍然会给出轨迹id。如果它只匹配一个类别id,它仍然会给出轨迹id(*)可能必须不止一个
>1
,每个试验id可能有两个以上相同的类别id。他只提到了两个类别,因此是2。如果我查询类别id 259,则只显示试验id 213,而不是所有试验id。计数(*)可能必须不止一个
>1
,每个试用id可能有两个以上相同的类别id。他只提到了两个类别,因此是2。如果我查询类别id 259,那么它只显示试用id 213,而不是所有的试用id。谢谢,在您的第二个解决方案中(如果您确实想要这两个类别,您可以通过添加以下子句对没有任何其他类别的行进行筛选:),如果我只有一个category_id,比如说(259),那么输出应该只有213,但它没有显示,你能给我一些帮助吗?如果我查询category_id 259,那么它只显示试用id 213,而不是所有的trail id。谢谢,在你的第二个解决方案中(如果您想要这两个类别,您可以通过添加以下子句对没有任何其他类别的行进行筛选:),如果我只有一个类别id,比如说(259),那么输出应该只有213,但它没有显示,您能给我一些帮助吗?如果我查询类别id 259,那么它只显示试用id 213,而不是所有的trail id。