Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按国家搜索场馆似乎有问题_Php_Mysql - Fatal编程技术网

Php 按国家搜索场馆似乎有问题

Php 按国家搜索场馆似乎有问题,php,mysql,Php,Mysql,概述:我正在制作一个活动的概念网站,因为活动可以在一个国家和世界范围内进行,我想让添加活动的人更容易,因为我们已经有了一个场馆列表,每天都会添加新的场馆。我们已经用下表建立了我们的数据库ER 国家 状态 郊区 状态表使用国家的id链接回国家表,而郊区表链接回状态 现在,虽然这一切都很好,但我认为我发现了一个问题,那就是如果我没有在场馆中存储国家或州id,如何让php代码知道该国家搜索该国的所有场馆。我在郊区只有一家商店 我想在我的数据库中有更少的列,但我不认为为什么不把这两个列放进去,这是因为我

概述:我正在制作一个活动的概念网站,因为活动可以在一个国家和世界范围内进行,我想让添加活动的人更容易,因为我们已经有了一个场馆列表,每天都会添加新的场馆。我们已经用下表建立了我们的数据库ER

国家 状态 郊区

状态表使用国家的id链接回国家表,而郊区表链接回状态

现在,虽然这一切都很好,但我认为我发现了一个问题,那就是如果我没有在场馆中存储国家或州id,如何让php代码知道该国家搜索该国的所有场馆。我在郊区只有一家商店

我想在我的数据库中有更少的列,但我不认为为什么不把这两个列放进去,这是因为我们将能够找到场馆,而场馆反过来将找到与该场馆相关的活动

我想知道他们的建议是否是更好的方法,任何反馈都会有所帮助

澄清 场馆表仅链接到郊区,郊区链接到州,州链接到国家

这是我的ER图的一部分

4个表格:国家、州、郊区、场地

场地有到郊区的FK 郊区有一个FK到州 州对国家有一个FK 解决方案1:非常糟糕的SQL不能做到这一点,但思考起来很有趣

SELECT * FROM venues WHERE suburb_id IN (
    SELECT suburb_id FROM suburb WHERE state_id IN (
        SELECT state_id FROM state WHERE country_id IN (
            SELECT country_id FROM country WHERE name = ?
        )
    )
)
解决方案2:为场馆到地点创建这样一个查找表,存储所有相关值,然后您可以通过该查找表查找所有内容

VENUE_LOCATION
id (INTEGER), PK, AUTO INCREMENT
venue_id (INTEGER), FK to venue id
suburb_id (INTEGER), FK to suburb id
state_id (INTEGER), FK to state id
country_id (INTEGER), FK to country id
唯一需要注意的是,在插入或修改记录的过程中,可能会有人给您提供无效的值,所以您可以做的是使此表仅为只读、插入和删除,并从应用程序层强制执行完整性

因此,让您的代码只接收场馆和郊区的输入,您的后端代码可以根据内部查找和用户输入确定州和国家ID

那么,按国家检索所有场馆的查询将是:

SELECT * FROM venues WHERE venue_id IN (
    SELECT venue_id
        FROM venue_location INNER JOIN country
        ON country.id = venue_location.country_id
        WHERE country.name = ?
)

您可以准备一个可视化的数据库图表以便更好地理解…谢谢,这是一个更容易理解的方法。