【问题标题】:MySQL + PHP: fetching data using foreign keysMySQL + PHP:使用外键获取数据
【发布时间】:2010-08-15 20:08:53
【问题描述】:

我有 2 个表(用户、墙)。 Wall 表中的 UserID 是一个外键。我将如何使用它来获取用户详细信息? (我想获取发布消息的用户 Forename 和 Surname。)

用户表:

墙桌:

编辑:我不知道如何显示数据。

<?php include('config.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
    <head>
        <title>Alpha</title>
        <link rel="stylesheet" href="style.css" type="text/css" />  
    </head>
    <body>

<?php 

// Logged IN
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Email'])) {


// Post to Database
if(!empty($_POST['message']))
{
$message = mysql_real_escape_string($_POST['message']);
$postmessage = mysql_query("INSERT INTO Wall (Message, UserID) VALUES('".$message."', '".$_SESSION['UserID']."')");
}

// Collet Latest Posts

$result = mysql_query('SELECT Message, UserID 
                         FROM Wall 
                     ORDER BY MessageID DESC 
                        LIMIT 20') or die('Invalid query: ' . mysql_error());

// Collet Post User

$query = mysql_query('SELECT Forename, Surname FROM Users INNER JOIN Wall ON Users.UserID = Wall.UserID;') or die('Invalid query: ' . mysql_error());

    ?>
    <div id ="container">
        <div id="insideleft">
            <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="profile.php">Edit Profile</a></li>
                <li><a href="wall.php">Community Wall</a></li>
                <li><a href="logout.php">Logout</a></li>
            </ul>
        </div>
        <div id="insideright">
            <h1>Community Wall</h1>
            <br />
            <form method="post" action="wall.php" name="wallpost" id="wallpost">
                <label for="message" class="message">Message: </label> <input type="text" name="message" id="message" class="message"/>
                <input type="submit" name="messagesub" id="messagesub" value="Post" /><br /><br />
                </fieldset>
            </form>
            <?php while ($row = mysql_fetch_assoc($result)) { ?>
            <p></p>
            <p><?=stripslashes($row['Message'])?></p><br />

<?php
} ?>

        </div>
    </div>
    <?php
}

//else {echo "<meta http-equiv='refresh' content='0;index.php'>";}

?>
</body>
</html>

如您所见,我正在输出消息,但我不知道如何输出海报的名字和姓氏。

【问题讨论】:

标签: php mysql foreign-keys


【解决方案1】:
$hostname = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'database';

$db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

$query = <<<QUERY
    SELECT Forename, Surname 
    FROM Users
    INNER JOIN Wall ON Users.UserID = Wall.UserID;
QUERY;

$statement = $db->query($query);
$rows = $statement->fetch(PDO::FETCH_ASSOC);
print_r($rows);

$db = null;

编辑: 鉴于新信息,您应该将查询合并为一个。

<?php include('config.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
    <head>
        <title>Alpha</title>
        <link rel="stylesheet" href="style.css" type="text/css" />  
    </head>
    <body>

<?php 

// Logged IN
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Email'])) {


// Post to Database
if(!empty($_POST['message']))
{
$message = mysql_real_escape_string($_POST['message']);
$postmessage = mysql_query("INSERT INTO Wall (Message, UserID) VALUES('".$message."', '".$_SESSION['UserID']."')");
}

// Collet Latest Posts

$query = <<<QUERY
    SELECT Users.UserID, Message, Forename, Surname 
    FROM Users
    INNER JOIN Wall ON Users.UserID = Wall.UserID;
    ORDER BY MessageID DESC
    LIMIT 20;
QUERY;
$result = mysql_query($query) or die('Invalid query: ' . mysql_error());

// Collet Post User
    ?>
    <div id ="container">
        <div id="insideleft">
            <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="profile.php">Edit Profile</a></li>
                <li><a href="wall.php">Community Wall</a></li>
                <li><a href="logout.php">Logout</a></li>
            </ul>
        </div>
        <div id="insideright">
            <h1>Community Wall</h1>
            <br />
            <form method="post" action="wall.php" name="wallpost" id="wallpost">
                <label for="message" class="message">Message: </label> <input type="text" name="message" id="message" class="message"/>
                <input type="submit" name="messagesub" id="messagesub" value="Post" /><br /><br />
                </fieldset>
            </form>
            <?php while ($row = mysql_fetch_assoc($result)) { ?>
            <p></p>
            <p>

            <?php
              echo "Message: ".stripslashes($row['Message'])."<br />";
              echo "Name: {$row['Surname']}, {$row['Forename']}";
            ?>

            </p><br />

<?php
} ?>

        </div>
    </div>
    <?php
}

//else {echo "<meta http-equiv='refresh' content='0;index.php'>";}

?>
</body>
</html>

【讨论】:

  • 到目前为止感谢您的帮助,但是我不知道如何在当前正在打印的消息中输出数据。
  • 再次欢呼,我收到以下消息“无效查询:非唯一表/别名:'Wall'”
  • 在这件事上有没有帮助的机会?会非常饱满。谢谢
  • 将 'FROM USERS, WALL' 更改为 'FROM USER'(失去 ', wall')连接的表总是可以在那里显示结果,而无需在 from 中调用它们。
【解决方案2】:
select w.MessageID, w.Message, u.UserID, u.Forename, u.Surname
from Wall w
inner join Users u on w.UserID = u.UserID

【讨论】:

    【解决方案3】:

    或者以另一种形式:

    SELECT w.*, u.Forename, u.Surname
    FROM Wall w, Users u
    WHERE w.UserID=u.UserID
    

    【讨论】:

    • 到目前为止感谢您的帮助,但是我不知道如何在当前正在打印的消息中输出数据。
    【解决方案4】:

    因为这里的主要目标是您在 sql 查询中编写的消息,首先是带有消息的表,在您的示例 Wall 表中,查询可能如下所示: $result = mysql_query ("SELECT u.Forename, u.Surname, w.Message FROM Wall AS w INNER JOIN Users AS u ON(w.UserID=u.UserID)");

    现在当输出使用时:

    <p><?=stripslashes($row['Surname'])?></p><br />
    <p><?=stripslashes($row['Lastname'])?></p><br />
    <p><?=stripslashes($row['Message'])?></p><br />
    

    当然要正确格式化。

    【讨论】:

    • 嗨,谢谢。我正在使用下面 Zurahn 提供的代码,但是我在执行时得到以下输出:“无效查询:不是唯一的表/别名:'Wall'” 任何帮助的机会?干杯
    • 好的,我改了查询,看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2022-06-13
    • 2022-10-14
    相关资源
    最近更新 更多