0

假设我有以下两个表格:

国家表:

---------------------------------
|ID|country_code|country_name   |
|01|CA          |Canada         |
|02|US          |United States  |
---------------------------------

用户表:

----------------------------------------------
|id|user_id|country_code|email_address       |
|01|oswalsh|CA          |blah@hotmail.com    |
|02|jlong  |US          |blah2@hotmail.com   |
----------------------------------------------

我正在创建我的用户注册/编辑帐户表单,并有一个国家/地区下拉菜单。最初我只是将 country_name 存储在 user_table 中,而不是使用 country_code,但是我还决定实现一个地图脚本……这是一大堆使用 country_code 的 javascript 文件。

因此,我创建了 country_table,以便可以匹配 country_code 和 country_name,以便映射用户交互...但是我不确定如何为下拉菜单创建 sql 语句。

到目前为止我所拥有的:

<?php
    include ('../../connect.php');

    $account_panel = mysql_query("SELECT * FROM user_table WHERE id=1")
            or die(mysql_error());

            while($row1 = mysql_fetch_array( $account_panel )) 
    {
?>
<select name="event_country" id="event_country"  required />
        <option selected="selected" value="<?php echo $row1['user_country']; ?>"><?php echo $row1['user_country']; ?></option>

        <?php           
            $countries = mysql_query("SELECT * FROM country_table")
            or die(mysql_error());

            while($row = mysql_fetch_array( $countries )) 
            {
                echo "<option value='". $row['value'] ."'>". $row['name'] ."</option>";
            }   
                echo "</select>";
        ?>

        <?php
        }
        mysql_close($connection);
        ?>

因此,您应该能够从上面看到正在发生的事情,该列表是从 country_table 填充的,但我正在尝试从 user 表中获取选定的值。这似乎确实有效,但我的问题是国家代码是存储和显示的内容。所以说我正在获取 oswalsh 的信息……我……返回的国家是 CA,我希望它显示加拿大。

4

1 回答 1

1

如果我理解正确,您需要熟悉SQL 连接

要连接这两个表并从 中获取country_name用户数据user_table,您需要这样的 SQL 语句:

SELECT ut.*, ct.country_name
FROM user_table ut
INNER JOIN country_table ct
ON ut.country_code = ct.country_code

在您的情况下,这将导致以下结果:

1   oswalsh CA  blah@hotmail.com    Canada
2   jlong   US  blah2@hotmail.com   United States

此外,您应该考虑使用mysqli_和停止使用mysql_函数。这是关于 SA 的有关此主题的讨论。

于 2012-11-15T11:34:30.300 回答