【问题标题】:Selecting multiple data from a table and inserting into another table using PHP form从一个表中选择多个数据并使用 PHP 表单插入到另一个表中
【发布时间】:2013-03-04 10:59:20
【问题描述】:

我创建了一个表单,可以将数据提交到多个表中。我的字段是名字、姓氏、电子邮件、城市/地区/国家,它们都被插入到 3 个不同的表中(用户、电子邮件、位置)。

数据可以很好地进入用户和电子邮件,但我对如何处理位置感到困惑。

我有 3 个单独的位置表(城市、地区、国家)。我要做的是将 CityID、RegionID 和 CountryID 插入 Location 表中。我设置了 City/Region/Country 字段,因此它会根据城市自动完成,如下所示:

我的 Cities 表包含所有必要的信息(CityID、RegionID、CountryID)。如何从 Cities 表中提取该数据并将其插入到我的 Location 表中?

这是我的代码的一部分。我对 PHP 和 MySQL 非常陌生,所以我为这个草率道歉。代码的第一部分有效,但第二部分无效(将数据插入 Location 表中)。

//Insert static values into people table
$sql_user = sprintf("INSERT INTO User (FirstName, LastName,) VALUES ('%s','%s')",
                    mysql_real_escape_string($_POST['FirstName']),
                    mysql_real_escape_string($_POST['LastName']),
$result_user = $db->query($sql_user);

//get last inserted userid
    $inserted_user_id = $db->last_insert_id();

//Insert values into location table
$sql_city = sprintf("INSERT INTO Location (UserID, CityID, RegionID, CountryID) 
VALUES ('$inserted_user_id',(SELECT CityID, RegionID, CountryID, FROM Cities))");
$result_city = $db->query($sql_city);

我想也许我需要在 FROM Cities 之后加上“WHERE...”,但我不知道我的情况会是什么。

【问题讨论】:

    标签: php mysql database select insert


    【解决方案1】:

    这个条件取决于你。如果您从输入框中获取值,您似乎需要找出从输入字段中读取位置的最佳方法。照原样考虑,您可能希望首先将输入分解为一个数组:

    $location = explode(',',$_POST['location'])
    $city = $location[0];
    $region = $location[1];
    $country = $location[2];
    

    现在在您的查询中 -

    "...WHERE city_name = '{$city}' AND region_name = '{$region_name}' AND country_name = '{$country}'";
    

    *编辑

    更详细地说,您需要设置一个单独的查询来使用 SQL 连接来获取位置。您的加入与 WHERE 约束相结合应该返回您正在寻找的城市。所以在这里:

    "SELECT Cities.CityID,Cities.RegionID,Cities.CountryID FROM Cities JOIN (Regions,Countries) ON Cities.RegionID = Regions.RegionID AND Cities.CountryID = Countries.CountryID WHERE Cities.CityName = '{city}' AND Regions.RegionName = '{$region}' AND Countries.CountryName = '{$country}' LIMIT 1"
    

    **更新

    这是非常基本的东西,您可以通过查看 MySQL 上的 PHP 手册获得。 http://php.net/manual/en/function.mysql-query.php

    既然你是新人,我就给你通行证。

    运行此查询后:

    $location_result = mysql_query("SELECT Cities.CityID,Cities.RegionID,Cities.CountryID FROM Cities JOIN (Regions,Countries) ON Cities.RegionID = Regions.RegionID AND Cities.CountryID = Countries.CountryID WHERE Cities.CityName = '{$city}' AND Regions.RegionName = '{$region}' AND Countries.CountryName = '{$country}' LIMIT 1"); 
    

    您需要访问结果。所以:

    while ($row = mysql_fetch_assoc($location_result)) {
       $cityID =  $location_result['CityID'];
       //etc... for each associative column
    }
    

    然后在您的插入查询中,为 CityID 列插入 $cityID 变量等...

    【讨论】:

    • 感谢您的回复,凯文。但有一个问题 - 我的 Cities 表没有 Region Name 或 Country Name。它只包含 Region ID 和 Country ID,我不能只包含条件 WHERE city_name = '{$city} 因为有几个同名的城市。你知道我该如何解决这个问题吗?
    • 每个位置表中的列是什么?城市表列、地区列等...
    • 城市表:CityID、CountryID、RegionID、CityName。区域表:RegionID、CountryID、RegionName。国家表:CountryID、CountryName。我尝试了您的解决方案,除了我遗漏了有关地区和国家/地区的数据(仅获取 CityID),它非常适用于没有重复的城市。一旦有同名的城市,我就会得到错误。
    • 我刚刚尝试了您在编辑中添加的内容,我认为我肯定走在正确的轨道上,但根据我所做的事情,我仍然会不断收到不同的错误。现在我有这个: SELECT Cities.CityID FROM Cities JOIN (Regions,Countries) ON Cities.RegionID = Regions.RegionID AND Cities.CountryID = countries.CountryID WHERE Cities.CityName = '{$city}' AND Regions.RegionName = '{$region}' AND countries.CountryName = '{$country}' LIMIT 1. 我只是想获取 CityID 而不是获取 RegionID 和 CountryID。这是我得到的错误:“列 'CityID' 不能为空”。
    • 好的,这里你需要更清楚一些。您在插入查询中得到“列 CityID”不能为空。
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多