根据mysql中的用户输入选择记录

时间:2013-04-26 09:35:08

标签: mysql select input reference relation

我有三张桌子

games (ga_id , game)

equipments (eq_id, equipment)

games_equipments (ga_id, eq_id)

ga_id引用游戏表的ga_ideq_id引用设备表的eq_id

该表包含以下示例数据:

games table: (1,basketball) , (2, baseball), (3, tennis)
equipments table: (1, A) (2,B) (3,B)
games_equipments table: (1,1) (1,2) (2,1) (2,3) (3,1)

这些是我想要做的事情: 1.如果我输入将返回篮球的eq_id 1和2,因为这是唯一同时使用eq_id 1和eq_id 2的游戏

  1. 如果我输入eq_id 1只返回网球,因为这是唯一使用单一设备的游戏1.虽然篮球和棒球都使用eq_id 1但每个都需要其他设备才能玩了。所以篮球和棒球不应该归还
  2. 如果我输入的eq_id 3将不会返回任何内容,因为虽然有一个游戏使用的是eq_id 3,这是棒球但是仍然需要eq_id 1来播放。
  3. 请帮帮我。

1 个答案:

答案 0 :(得分:0)

您应该加入您的表格并使用HAVING关键字过滤结果:

SELECT games.game, COUNT(games.ga_id), ga_eq.eq_id FROM `games`
       JOIN ga_eq USING (ga_id) 
       JOIN equipements USING (eq_id)  
       GROUP BY games.ga_id 
       HAVING COUNT(games.ga_id)=1 AND eq_id=1

这是方法: 获取所有行

SELECT games.game,  ga_eq.eq_id FROM `games` 
         JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 

结果: enter image description here

然后使用地址ID并计算一个数字id(所以数字设备)

SELECT games.game,  ga_eq.eq_id, COUNT(games.ga_id) FROM `games` 
      JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 
      GROUP BY  games.ga_id

enter image description here

然后使用HAVING关键字仅保留具有一个设备的游戏并将您的eq_id过滤器置于HAVING CLAUSE(不在WHERE子句中)

SELECT games.game,  ga_eq.eq_id, COUNT(games.ga_id)
       FROM `games` JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 
        GROUP BY  games.ga_id HAVING COUNT(games.ga_id)=1  AND eq_id=1

结果: enter image description here

更改过滤器AND eq_id=3 - >空结果

对于许多设备ID,查询有点不同, 如果其他人有想法的话,我会尝试制作一个通用但没有尝试过吗?

SELECT g.game, equipements.eq_id, (
                                  SELECT COUNT( eq_id ) FROM ga_eq
                                  WHERE ga_id = g.ga_id
                                   AND eq_id IN (1, 2)
                                  ) AS nb_eq
                 FROM  `games` g
                 JOIN ga_eq USING ( ga_id ) 
                 JOIN equipements USING ( eq_id ) 
                 GROUP BY game
                 HAVING nb_eq =2 

您必须更改AND eq_id IN (1, 2)HAVING nb_eq =2才能更改输入

相关问题