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

标签 mysql select input reference relation

我有三个表

游戏(ga_id,游戏)

设备(eq_id, equipment),

games_equipments (ga_id, eq_id)

ga_id是指游戏 table 的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 才能播放。

请帮帮我。

最佳答案

您应该加入您的表并使用 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

然后 grouby 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 子句中(而不是在 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) AND HAVING nb_eq =2 来改变输入

关于mysql - 根据mysql中的用户输入选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233220/

相关文章:

mysql - 使用动态 SQL 查询选择数据

mysql - 实现图树的最佳数据库结构

PHP + MYSQL 座位预定系统。计算免费座位

javascript - 检查是否至少有一个输入字段在 jQuery 中被填充

mysql - 使用 UNION 或任何其他解决方案将两个查询合并为一个

mysql删除选择

javascript - 比较两个选择的选项,如果 value != id 则隐藏

c++ - 由于变量范围导致的段错误

html - 在 Opera 中,输入用黑色包围

php - MySqli 返回 NULL 值并且无法插入或选择