*****编辑********
Sql fiddle here
*****编辑********
我正在尝试连接来自四个不同表的数据。
系统流程基本上如下:用户登录并标记其可用性,并将其插入数据库;然后,管理员可以查看在任何给定日期哪些用户可用。对于此特定流程,管理员必须能够查看尚未指定游戏的可用用户。
我知道这可以通过 PHP 使用大量查询和脚本来实现,但我确信这也可以通过联接进行管理。
我现有的查询是:
SELECT
`availability`.`ref_num`,
`referee`.`grading`,
`referee`.`user_number`,
`user`.`forename`,
`user`.`surname`,
`availability`.`availability_num`,
`availability`.`wk_num`,
`availability`.`day_num`
FROM `availability`
INNER JOIN referee on availability.ref_num = referee.ref_number
INNER JOIN user on user.user_number = referee.user_number
LEFT JOIN appointments ON
(appointments.referee_code = referee.ref_number) AND
(appointments.availability_number = availability.availability_num)
WHERE appointments.appointment_number IS null
我当前有四个用户进入我的测试数据库,每个用户都是裁判,并且每个用户都有两个可用日期。但是,上面的查询仅返回两行,而不是八行。
返回的数据为:
ref_num grading user_number forename surname availability_num wk_num day_num
3 5 6 John Smith 72 20 6
3 5 6 John Smith 73 21 6
但是,我期待:
ref_num grading user_number forename surname availability_num wk_num day_num
1 6 3 Bob Wills 76 20 6
1 6 3 Bob Wills 77 21 6
2 7 5 Alex Jones 74 20 6
2 7 5 Alex Jones 75 21 6
3 5 6 John Smith 72 20 6
3 5 6 John Smith 73 21 6
4 8 7 James Bar 78 20 6
4 8 7 James Bar 79 21 6
我有一种感觉,实际返回的两行是因为它们是 availability_num
中最低的两个值,但我无法弄清楚为什么其余表不是返回。
表结构如下供引用。关于我哪里出错的一些指导将不胜感激。很抱歉这篇文章很长,但我想展示我所掌握的所有信息。
`appointments` (
`appointment_number` int(11),
`level` int(11) NOT NULL,
`referee_code` int(11) NOT NULL,
`role` int(11) NOT NULL,
`fixture_number` int(11) NOT NULL,
`availability_number` int(11) NOT NULL,
`published` int(11) NOT NULL
)
`availability` (
`availability_num` int(11) NOT NULL,
`wk_num` int(11) NOT NULL,
`day_num` int(11) NOT NULL,
`ref_num` int(11) NOT NULL
)
`referee` (
`ref_num` int(11) NOT NULL,
`grading` int(11) NOT NULL,
`user_number` int(11) NOT NULL
)
`user` (
`user_number` int(11) unsigned NOT NULL,
`forename` varchar(50) NOT NULL,
`surname` varchar(50) NOT NULL,
`mobile_phone_number` varchar(11) DEFAULT NULL,
`home_phone_number` varchar(11) DEFAULT NULL,
`email` varchar(100) NOT NULL,
`user_name` varchar(50) DEFAULT NULL,
`pass_hash` varchar(250) DEFAULT NULL
)
最佳答案
可以说这里没有真正的“问题” - 我只是在正确的列中包含了错误的数据。
感谢 Aleksandar Miladinovic 选出了那个人。
关于php - 查询未选择表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336559/