Php 在确定两个MySQL记录之间的关系之前,先确定它们是否存在

Php 在确定两个MySQL记录之间的关系之前,先确定它们是否存在,php,jquery,mysql,sql,Php,Jquery,Mysql,Sql,假设您有一个包含人员、总线和映射表的表。你要确定,给定一组人,谁在给定的公交车上。因此,您可以创建一个PHP页面来返回一个简单的人员列表。您还希望页面具有健壮性,因此希望返回DB反映的任何错误或其他故障。此外,PDO用于使站点具有灵活性 为了减少数据库查询(假设查询数据库是最昂贵的部分,特别是如果数据库很大和/或访问者很多的话),您可能希望将对数据库的查询减少到绝对最小 在验证类型和其他意外值的数据之后,一个简单的脚本在DB端可能看起来像这样: //See if the Bus exists S

假设您有一个包含人员、总线和映射表的表。你要确定,给定一组人,谁在给定的公交车上。因此,您可以创建一个PHP页面来返回一个简单的人员列表。您还希望页面具有健壮性,因此希望返回DB反映的任何错误或其他故障。此外,PDO用于使站点具有灵活性

为了减少数据库查询(假设查询数据库是最昂贵的部分,特别是如果数据库很大和/或访问者很多的话),您可能希望将对数据库的查询减少到绝对最小

在验证类型和其他意外值的数据之后,一个简单的脚本在DB端可能看起来像这样:

//See if the Bus exists
SELECT id FROM Busses WHERE id={$bus_id};

//See if the given Persons exist
SELECT id FROM Persons WHERE id IN ({$comma-seperated-person-ids});

//Finally check the mappings table and discover who is on that bus.
SELECT person_id FROM Busses_Persons WHERE bus_id={$bus_id} person_id IN ({$comma-seperated-ids});
我认为这个顺序很重要,因为假设总线不存在,如果没有执行第一个查询来确定现有总线,那么这个页面将返回success并显示一个空列表。如果没有人存在,并且您没有执行第二次查询来确定哪些人集存在,哪些人不存在,那么您也将返回一个没有人的成功页面。严格地说,如果提供的任何数据无效或不存在,您应该返回一个错误页面

在给定一组人员和给定一辆公交车上,如何获取该公交车上的人员列表,并在单个查询中找出给定的人员或公交车是否存在,以及所有这些信息


我认为您可以深入研究(即使要使用PDO来维护DB抽象,您可能也不能走得太远),否则这将成为DB执行时间的问题。但我真的很想知道,当遇到这个问题时,其他开发人员是如何使他们的脚本更快、更高效的?

您是否考虑过SQL中的
JOIN
子句?是的,但这如何揭示人或总线的存在?它只会返回一个空列表,屏蔽任何一条记录都不存在。只需左键连接,将Busses_Persons置于左侧。在选择列表中,包括Busses.ID和Persons.ID。如果前者为空,则总线不存在;如果后者为空,则personA full outer join将满足您的需要。@Florian Mertens您可以添加表结构和一些示例数据吗?