2010-08-15 91 views
3

我有2个表(Users,Wall)。 Wall表中的UserID是一个外键。我将如何去使用此获取用户的详细信息? (我想获取用户的名字及姓氏谁发布的消息。)MySQL + PHP:使用外键获取数据

用户表: alt text http://i33.tinypic.com/1eq6n5.png

墙表: alt text http://i37.tinypic.com/b5po5u.png

编辑:我无法弄清楚如何显示的数据。

<?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> 

正如你所看到的我正在输出消息,但我不知道如何输出海报的姓和名。

+4

请不要问一个新问题。继续通过编辑您的旧的问题:http://stackoverflow.com/questions/3489017/mysql-php-fetching-data-using-foreign-keys – silvo 2010-08-15 20:41:53

回答

8
$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> 
+0

+1为完整答案与PHP源代码:) – silvo 2010-08-15 20:17:12

+0

感谢您的帮助到目前为止,但是我不知道如何输出当前正在打印的消息的数据。 – ritch 2010-08-15 20:30:33

+0

再次欢呼,我收到以下消息“无效查询:不是唯一表格/别名:'Wall'” – ritch 2010-08-15 20:46:05

0
select w.MessageID, w.Message, u.UserID, u.Forename, u.Surname 
from Wall w 
inner join Users u on w.UserID = u.UserID 
0

或以另一种形式:

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

感谢您的帮助,但是我不知道如何输出当前正在打印的信息。 – ritch 2010-08-15 20:31:04

1

由于这里的主要目标是消息您在SQL查询中第一个与消息表写在你的榜样墙表和查询可以看起来像这个: $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 /> 

当然,做正确的格式。

+0

嗨,谢谢。我正在使用Zurahn提供的代码,但是我在执行时得到以下输出:“无效查询:不是唯一表/别名:'Wall'” 对此有何帮助?干杯 – ritch 2010-08-15 20:59:41

+0

好吧,我改变了查询,看看。 – Centurion 2010-08-15 21:21:01