-1

我有以下简单的搜索代码:

 <?php

mysql_connect ("localhost", "xxx","xxx")  or die (mysql_error());
mysql_select_db ("xxx");

$term = $_POST['term'];

$sql = mysql_query("select * from attendees where Surname like '%$term%' or Name like'%$term%' ");

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/><br/>';
}
?>

这可以正常工作并显示参加者表中的请求数据,但是我还想显示每个结果的图像。这里的问题是图像的路径在“路径”列中的“图像”表中。参加者表中的 id_attendees 列和图像表中的 id_images 列是相同的,因此如果 id_attendees 为 4,例如 id_images=4 的行包含“路径”列中的图像路径。那么我如何在这里调用这条路径呢?

4

5 回答 5

1

使用左连接

$sql = mysql_query("select * from attendees a
                       left join images i on a.id_attendees = i.id_images
                       where a.Surname like '%$term%' or a.Name like'%$term%' ");

这将使用图像加入参加者并左加入确保如果没有与参加者匹配的 id 则它显示为 null 的图像....

正如stackoverflow中的每个人所建议的那样......即使我建议你使用mysqli,因为

此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

于 2013-03-27T09:27:25.143 回答
0

请注意,强烈建议不要使用 mysql_* 函数。

反正; 你可以用一个简单的 JOIN 来写这个:

SELECT whatever, you, want
FROM attendees JOIN id_attendees = id_images
WHERE ... your current where clause

你可以使用所有你想要的列(只要你选择它们),就像你现在做的那样:

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];

echo '<img src="'.$row['image_path'].'" />'; // YOUR IMAGE

echo '<br/><br/>';
}

注意:您的代码正在使用mysql_函数,这是不鼓励的。另请注意,您当前的代码中存在较高的 SQL 注入漏洞。使用 mysql_real_escape_string 确保您的数据被转义,或者更好的是,使用 PDO 或其他正确方法来防止这种情况并具有良好系统的好处。

于 2013-03-27T09:27:50.077 回答
0
mysql_connect ("localhost", "xxx","xxx") or die (mysql_error());<p>
mysql_select_db ("xxx");

$term = $_POST['term'];

$sql = mysql_query("SELECT t1.*, t2.* FROM attendees t1 LEFT JOIN images t2 ON t1.id_attendees=t2.id_images WHERE t1.Surname LIKE '%$term%' OR t1.Name LIKE'%$term%' ");

while ($row = mysql_fetch_array($sql)){
echo '<br/> Name: '.$row['Name'];
echo '<br/> Last Name: '.$row['Surname'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/> Image: <img alt="img" src="' . $row['path'] . '">';
echo '<br/><br/>';

}
于 2013-03-28T10:26:18.810 回答
0

您可以INNER JOIN用于加入图像表以获取图像路径

mysql_connect ("localhost", "xxx","xxx")  or die (mysql_error());
mysql_select_db ("xxx");

// Note that you have to escape your search term to prevent SQL Injection
$term = mysql_real_escape_string($_POST['term']);

$sql = mysql_query("SELECT a.*, i.imagepath 
                    FROM attendees a 
                    JOIN images i
                      ON i.id_images=a.id_attendees
                    WHERE a.Surname LIKE '%$term%' OR a.Name LIKE '%$term%' ");

while ($row = mysql_fetch_array($sql)){
  echo '<br/> Name: '.$row['Name'];
  echo '<br/> Last Name: '.$row['Surname'];
  echo '<br/> E-Mail: '.$row['email'];
  echo '<br/><br/>';
}

您必须使用 MySQLi 或 PDO,因为mysql_*不推荐使用函数!

于 2013-03-27T09:29:44.087 回答
0

在链接表时总是使用关节,在你的情况下它会像:

$query = "select a.*, i.path
          from attendees a
             inner join images i ON i.id_images = a.id_attendees
          where a.Surname like '%$term%' or a.Name like'%$term%'"

为了进一步了解这一点,请查看http://phpweby.com/tutorials/mysql/32

于 2013-03-27T09:33:20.600 回答