如何从mySQL中的索引字段输出其他表的值?

时间:2018-01-03 10:50:35

标签: php mysql join session-variables

我有两个MySQL表

  1. 具有id,user_formOfAdress和其他几个字段的用户。字段user_formOfAdress包含表formofadress的id

  2. 带有id,formOfAdress_german和其他几个字段的formofadress,例如id 1 = Mr.,id 2 = Mrs。

  3. users表的记录由Session变量标识。

    要输出不是字段user_formOfAdress的id,而是输出表格formofadress.formOfAdress_german(例如Mr.或Mrs.)的值,我写了这个:

    if(array_key_exists("id", $_SESSION) && $_SESSION['id']){
            $uid = $_SESSION['id'];
            $link = mysqli_connect("localhost:3307", "root", "Dinah123", "proficrm");
            $query = "
            SELECT formofadress.ID AS formofadress_ID, formofadress.formOfAdress_german, users.ID, users.user_formOfAdress 
            FROM `formofadress` 
            LEFT JOIN users 
            ON formofadress.formofadress_ID = users.user_formOfAdress
            WHERE `users.ID` = '".$uid."' 
            LIMIT 1
            ";
            $result = mysqli_query($link, $query);
            $record = mysqli_fetch_assoc($result); 
        $user_formOfAdress = $record['formOfAdress_german'];
            }
    

    “FROM formofadress”因为我想输出这个表的先生或者夫人,但我还要使用users表,因为会话ID也是用户记录的id ...

    并非user表中的每条记录都有user_formOfdAdress(值1,2或NULL)中的值,但formofadress表中的每条记录都有一个固定值。

    错误是: 未定义的变量:位于最后一行的user_formOfAdress

    这是我第一次使用JOIN,但遗憾的是,即使经过长时间的搜索,我也无法解决这个问题。

    正确的代码:

    if(array_key_exists("id", $_SESSION) && $_SESSION['id']){
            $uid = $_SESSION['id'];
            $link = mysqli_connect("localhost:3307", "root", "Dinah123", "proficrm");
            $query = "
                SELECT formofadress.ID, formofadress.formOfAdress_german, users.ID, users.user_formOfAdress 
                FROM formofadress 
                LEFT JOIN users 
                ON formofadress.ID = users.user_formOfAdress 
                WHERE users.ID = '".$uid."' 
            ";
            $result = mysqli_query($link, $query);
            $record = mysqli_fetch_assoc($result); 
            $user_formOfAdress = $record['formOfAdress_german'];
        }
    

1 个答案:

答案 0 :(得分:0)

您的SQL语法存在问题。您使用LEFT JOIN加入users加入formofadress,而users有时无法关注,您可能会获得NULL值。我还清理了你的其他查询语法,因此它更具可读性。

另外,请检查数据库是否期望INT$uid。如果没有,则返回撇号''

if(array_key_exists("id", $_SESSION) && $_SESSION['id'])
{
    $uid = $_SESSION['id'];
    $link = mysqli_connect("localhost:3307", "root", "Dinah123", "proficrm");
    $query = "SELECT u.ID, u.user_formOfAdress, f.ID, f.formOfAdress_german,  
    FROM users u LEFT JOIN formofadress f ON f.formofadress_ID = u.user_formOfAdress 
    WHERE u.ID = ".$uid." LIMIT 1";
    // if database is not expecting `INT` for `u.ID` then return the apostrophes ' '

    $result = mysqli_query($link, $query);

    // mysqli_fetch_assoc returns case sensitive keys
    $record = mysqli_fetch_assoc($result);

    $user_formOfAdress = $record['formOfAdress_german'];
 }