我有三个表,分别称为:users、facilities和staff_facilities。
users包含平均用户数据,在我的例子中最重要的字段是users.id、users.first和users.last。
facilities还包含相当多的数据,但除了 之外,没有一个数据一定与此示例相关facilities.id。
staff_faciltiesstaff_facilities.id由(int,auto_inc,NOT NULL)、staff_facilities.users_id(int,NOT NULL) 和staff_faciltities.facilities_id(int,NOT NULL)组成。(那是一口!)
staff_facilities引用其他两个表的 ID,我们调用该表来查找用户的设施和设施的用户。
这是我在 PHP 中的选择查询:
SELECT users.id, users.first, users.last FROM staff_facilities LEFT JOIN users ON staff_facilities.users_id=users.id WHERE staff_facilities.facilties_id=$id ORDER BY users.last
Run Code Online (Sandbox Code Playgroud)
该查询在我们的开发服务器上运行得很好,但是当我将其放入客户端的生产环境中时,结果集中经常会出现空白行。我们的开发服务器使用客户端生产服务器上已存在的复制表和数据,但硬件和软件差异很大。
这些行没有任何信息,包括需要在数据库中输入 NOT NULL 值的三个 id 字段。通过后端的MySQL管理工具运行查询会返回相同的结果。在表中搜索 NULL 字段没有找到任何结果。
另一个奇怪的事情是,空行的数量根据 WHERE 子句 id 检查导致的不同结果而变化。通常大约有一到三个空行,但使用相同参数时它们是一致的。
我曾多次处理过由于 LEFT JOINS 而返回几乎重复的行,但我以前从未发生过这种情况。就显示信息而言,我可以轻松地向最终用户隐藏它。我主要担心的是,随着时间的推移和记录数量的增加,这个问题将会变得更加复杂。目前,该系统刚刚安装完毕,表中已经有 2000 多条记录staff_facilities。
任何见解或方向将不胜感激。我还可以提供更详细的示例和信息。
您仅从连接右侧的表中选择列。当然,其中一些是完全空的,你做了左连接。因此,这些记录与连接左侧表中的 ID 匹配,但不与连接右侧的任何数据匹配。由于您没有从左表中返回任何列,因此您看不到任何数据。
| 归档时间: |
|
| 查看次数: |
7797 次 |
| 最近记录: |