3

在过去的几天里,我一直在尝试了解如何从多个表中获取数据,但我不能说我完全理解它是如何工作的。反正 :)

我想要做的是使用搜索栏获取存储在多个表中的图像来定义参数,即艺术家姓名(我知道将图像存储在数据库中可能会导致很多问题,但它是大学的一项练习,所以我不能真的做很多事情)

所以现在要具体。我有 5 个表,分别称为 animaldata、cardata、landscapedata、peopledata 和 otherdata。每个表都有以下字段:1 id 2 艺术家名称 3 详细信息 4 照片 5 照片类型和 6 日期。其中artist_name 是上传图片的登录人员的姓名,details 是标题,photo 是要保存的blob 项目,phototype 是图片的.. 井类型:P

所以我想做的是当有人使用搜索栏搜索艺术家时,代码可以从艺术家上传的所有表格中获取和显示所有图像。

这是我用来从 1 个表中获取数据的代码,但我不知道如何更改它以便也搜索其他表。

那就是search.php

<?php
mysql_connect ("localhost","root","")  or die (mysql_error());
mysql_select_db ("photo_album_db");

$term = $_POST['term'];

$sql = mysql_query("select * from animaldata where artist_name like '%$term%'");

while ($row = mysql_fetch_array($sql)){
    echo $row['details'];
echo "</br>";
echo "<img src=getan.php?id=".$row['id']." width=250 height=200/>";
echo "</br>";
}
?>

搜索栏的形式如下: <form action="search.php" method="post"><input type="text" name="term" /><input type="submit" name="search" value="Search" /></form>

提前感谢您的任何建议,如果您需要更多“线索”,请告诉我:) :) :)

4

2 回答 2

2

如果它们具有相同的列,则要更改表,然后使用:

$sql = mysql_query("select animaldata.artist_name AS animaldata_artist_name, cardata.artist_name AS cardata_artist_name /* do this for all columns in all tables, or mor specifically for the columns you need  */ from animaldata AS a, cardata AS c, landscapedata AS l, peopledata AS p where a.artist_name like '%$term%' OR c.artist_name like '%$term%' OR l.artist_name like '%$term%' OR p.artist_name like '%$term%'");

试试这个来显示图像:

<img src="data:image/jpeg;base64,".base64_encode($row['image_blob'])." width...

这不会对照片提出单独的请求。它将图像的内容嵌入到 HTML 中。

该技术由data:uri协议支持。

于 2012-05-20T10:19:46.333 回答
2

试试这个:

// set up database connection ... 

$term = my_awesome_sanitizer($_POST['term']);

$tables = array("animaldata", "cardata", "landscapedata", "peopledata", "otherdata");
foreach ($tables as $table)
{
    $sql = mysql_query("select * from $table where artist_name like '%$term%'");
    while ($row = mysql_fetch_array($sql))
    {
        echo $row['details'];
        // show stuff ....
    }
}
于 2012-05-21T13:19:06.213 回答