【问题标题】:SQL query to fetch data form another table用于从另一个表中获取数据的 SQL 查询
【发布时间】:2014-05-08 09:57:42
【问题描述】:

我一直在尝试构建一个稍微复杂的 SQL 查询,以从与我需要“询问”的表无关的表中获取一些键。

实际案例:

我有四个表:users、devices、preferences 和 user_devices。

  • 表用户,有用户信息和用户“ID”。
  • 表设备,有设备信息列,设备“ID”(设备ID)和设备“密钥”(设备内部ID)。
  • 表格首选项、“用户 ID”和一些带有工作日(星期一、星期二、星期三...)的布尔字段。
  • 表 user_devices,分配 ID(auto_increment,不重要)、“user_id”和“device_id”以及与各自表的关系。此表用于将设备分配给用户。

问题是我需要获取在表首选项中将首选项“星期一”设置为 true 的用户的所有“devices.key”。

示例:我向数据库询问偏好设置为 monday true 的设备,然后我获得了一个包含两个设备密钥的数组。

此查询获取用户 4 的设备密钥,但我需要获取数据库中“星期一”设置为 true (1) 的所有用户的设备密钥。

SELECT key FROM devices, user_devices WHERE devices.id = user_devices.device_id AND user_devices.user_id = 4

非常感谢。

【问题讨论】:

  • 你可以试试JOIN函数,或许对你有帮助。
  • 我已经尝试加入 preferences.id 和 user_devices.user_id 但我不知道如何使用 JOIN 来调整查询以满足我的需求...:/

标签: php mysql sql


【解决方案1】:

你可以试试下面的查询

SELECT `devices`.`key` 
FROM users 
JOIN preferences ON users.id = preferences.user_id
JOIN user_devices ON users.id = user_devices.user_id
JOIN devices ON user_devices.device_id = devices.id
WHERE preferences.monday = true

显然,您必须检查并更正查询中的首选项和用户表的列名,以匹配您的数据库列名。

【讨论】:

    【解决方案2】:

    你可以试试这个(我只是讨厌 JOIN ;p):

    SELECT DISTINCT(`devices`.`key`)
    FROM `devices`,`user_devices`,`preferences`
    WHERE `devices`.`id` = `user_devices`.`device_id`
      AND `preferences`.`user_id` = `user_devices`.`user_id`
      AND `preferences`.`monday` = 1
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2012-02-24
      • 2015-03-28
      • 2022-01-08
      • 2021-07-16
      • 1970-01-01
      • 2013-07-15
      相关资源
      最近更新 更多