繁体   English   中英

用于从两个关系表中显示一个帐户的SQL代码

[英]Sql code for displaying one account from two relational tables

我只想显示两个关系表中的一个帐户。 例如,如果我查询我的帐号并输入,则仅显示我帐户的详细信息,而不是每个成员。 因此,在我的输出中,数据库中将显示整个成员及其详细信息。 如何管理两个关系表中的一个帐户? 我知道sql中出了点问题。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT member.*, account.*
FROM member, account
WHERE member.mem_id = account.mem_id';

mysql_select_db('databasename');
$retval = mysql_query( $sql, $conn ); 
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Account Number:{$row['Account_Number']}  <br> ".
 "First Name: {$row['fname']} <br> ".
 "Last Name: {$row['lname']} <br> ".
 "Address: {$row['address']} <br> ".
 "Contact: {$row['contact']} <br> ".
 "Share Capital: {$row['Share_Capital']} <br> ".
 "Regular Savings: {$row['Regular_Savings']} <br> ".
 "Power Savings: {$row['Power_Savings']} <br> ".
 "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>

现在这是输出。

Account Number: 
First Name:
Last Name:
Address: 
Contact: 
Share Capital: 
Regular Savings:
Power Savings:

如果您没有选择正确的答案,我怀疑您可能手头有数据问题。 但是,假设您的记录确实是1比1,那么可以肯定地做到这一点:

注意,我在顶部添加了$ find_id作为参数

<?php


    $dbhost     = 'localhost';
    $dbuser     = 'root';
    $dbpass     = 'password';
    $find_id    = 12;

    try
    {

        $conn = mysql_connect($dbhost, $dbuser, $dbpass);   
        if( !$conn )
            throw new Exception( "Couldn't establish a connection" );

        if( !mysql_select_db('databasename', $conn )  )
            throw new Exception( "Database couldn't be selected" );

        $sql = 'SELECT M.*, A.* FROM member M LEFT JOIN account A ON M.mem_id = A.mem_id
                WHERE M.mem_id = $find_id';

        if( !($retval = mysql_query( $sql, $conn )) )
            throw new Exception( "No matching result, or query was borked; " . mysql_error() );

        if( !($row = mysql_fetch_assoc( $retval )) )
            throw new Exception( "No rows found, move along." );

        print_r( $row );
    }
    catch( Exception $x )
    {
        echo "An exception occurred: " . $x->getMessage();
    }

因此,这很丑陋,但需要注意以下几点:

可能不想使用mysql_ *函数; 改用PDO(不会立即消失)-并使用准备好的参数减轻SQL注入攻击。 我可以添加的书呆子花絮是,通常将身份验证表例程与用户表例程分开是一个很好的逻辑,因为用户表通常最终在其“外部”使用。 查询auth以建立ID,然后在单独的线程中使用user表。 这样,您的身份验证查询就不会占用两个表。

祝好运! 希望这可以帮助。

要只退回1个帐户,请尝试

'SELECT member.*, account.* FROM member inner join account on member.mem_id = account.mem_id limit 1';

但是,要检索成员并说明一个Memberid,查询将需要更改为包括mem_id上的where谓词。 例如:

    $member_id = 'some memberid'
    'SELECT member.*, account.*
    FROM member inner join account
    on member.mem_id = account.mem_id 
    where member.mem_id = $member_id';

您正在比较相同的ID:“ WHERE member.mem_id = account.mem_id”(我假设member.mem_id和account.mem_id引用相同的“用户”)。

您应该执行以下操作:

$query = "SELECT member.*, account.*
FROM member, account
WHERE member.mem_id = " . $the_id;

其中$ the_id应该是您从表单(澄清的HTML表单)获得的数字。

希望能帮助到你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM