SQL查询从另一个表中获取数据

时间:2014-05-08 09:57:43

标签: php mysql sql

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

实际案例:

我有四个表:用户,设备,首选项和user_devices。

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

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

示例:我向数据库询问具有首选项monday的设备是否为true,并且我获得了一个包含两个设备密钥的数组。

此查询获取用户4的设备密钥,但我需要在数据库中将“monday”设置为true(1)来获取所有用户的de device密钥。

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

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下查询

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

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

答案 1 :(得分:0)

你可以尝试这个(我只是讨厌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

希望它会有所帮助