MySQL + PHP: выборка данных с использованием внешних ключей

У меня есть 2 таблицы (пользователи, стена). UserID в таблице Wall является внешним ключом. Как я могу получить информацию о пользователях, используя это? (Я хочу получить пользователей Forename и Surname, которые отправили сообщение.)

Таблица пользователей: alt text http://img.ruphp.com/mysql/1eq6n5.png

Настенный стол: текст alt http://img.ruphp.com/mysql/b5po5u.png

EDIT: я не могу понять, как показать данные.

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

Как вы видите, я выводил сообщение, но я понятия не имею, как вывести имя и фамилию плаката.

Solutions Collecting From Web of "MySQL + PHP: выборка данных с использованием внешних ключей"

 $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; 

EDIT: Учитывая новую информацию, вы должны объединить свои запросы в одну.

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

Поскольку здесь основной целью являются сообщения, которые вы пишете в sql-запросе сначала таблицу с сообщением, в вашем примере Wall table и запрос могут выглядеть так: $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 /> 

Конечно, правильное форматирование.

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

Или в альтернативной форме:

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