从MySQL DB

时间:2015-09-09 16:15:07

标签: php mysql

我有一个mysql数据库,它在不同的列下包含多个图像(路径),即id,image1,image2,image3等。

我使用下面的代码根据URL中的id检索图像,并将它们显示在php页面的滑块中。

$query = "SELECT * FROM `images` WHERE ` id`='" . $id . "'";  
$result = mysql_query($query); 
while($fetch = mysql_fetch_assoc($result)){
$image1 = $fetch['image1'];
$image2 = $fetch['image2'];
$image3 = $fetch['image3'];
$image4 = $fetch['image4'];
$image5 = $fetch['image5'];
$image6 = $fetch['image6'];
$image7 = $fetch['image7'];
$image8 = $fetch['image8'];
$image9 = $fetch['image9'];
$image10 = $fetch['image10'];
}

并显示图片:

echo '<a data-Img='.$image1.' href='.$image1.'>';echo '<img class="Tmb" alt="" src='.$image1.'></a>';
echo '<a data-Img='.$image2.' href='.$image2.'>';echo '<img class="Tmb" alt="" src='.$image2.'></a>';
echo '<a data-Img='.$image3.' href='.$image3.'>';echo '<img class="Tmb" alt="" src='.$image3.'></a>';
echo '<a data-Img='.$image4.' href='.$image4.'>';echo '<img class="Tmb" alt="" src='.$image4.'></a>';
echo '<a data-Img='.$image5.' href='.$image5.'>';echo '<img class="Tmb" alt="" src='.$image5.'></a>';
echo '<a data-Img='.$image6.' href='.$image6.'>';echo '<img class="Tmb" alt="" src='.$image6.'></a>';
echo '<a data-Img='.$image7.' href='.$image7.'>';echo '<img class="Tmb" alt="" src='.$image7.'></a>';
echo '<a data-Img='.$image8.' href='.$image8.'>';echo '<img class="Tmb" alt="" src='.$image8.'></a>';
echo '<a data-Img='.$image9.' href='.$image9.'>';echo '<img class="Tmb" alt="" src='.$image9.'></a>';
echo '<a data-Img='.$image10.' href='.$image10.'>';echo '<img class="Tmb" alt="" src='.$image10.'></a>';

这项工作正常,但并非数据库中的所有项目都有10个图像,因此对于仅包含5个图像的项目,会显示空白图像占位符?这可以防止,还是需要一种不同的存储图像的方法?

3 个答案:

答案 0 :(得分:-1)

您的数据库结构部分错误。如果您有多个与相同ID相关的图像,则应将它们存储在不同的表格中,如

<强> images_table

img_id | img_path
100    | path1
100    | path2
101    | path3
102    | path3

因此,您将有机会为同一个ID添加第11或第20张图片。如果你有相同ID的100张图片,你会为它们创建+90列吗?

答案 1 :(得分:-1)

正如有人告诉你的那样,每当你有一个可变数量的记录列时,最好将表拆分为两个,用一个字段(外键)将它们相关联。

+--------+      +---------+
| Table1 |      |  Table2 |
+--------+      +---------+
|   row  |<-----|  idRow  |
+--------+      +---------+
                |  image  |
                +---------+

SELECT t1.row, t2.image FROM table1 t1
                        JOIN table2 t2 ON t1.row = t2.idRow

此SQL查询应返回类似

的内容
+-------+----------+
| row1  |  image1  |
+-------+----------+
| row1  |  image2  |
+-------+----------+
| row1  |  image3  |
+-------+----------+
| row1  |  image4  |
+-------+----------+
| row1  |  image5  |
+-------+----------+
| row2  |  image1  |
+-------+----------+
| row2  |  image2  |
+-------+----------+
| row2  |  image3  |
+-------+----------+
| row3  |  image1  |
+-------+----------+

答案 2 :(得分:-1)

您的系统显示的图像中每个图像都有单独的列无效。

根本没用。

    ----- ----- ----------
   | ID | Name | Path     |
    ----- ----- ----------
   | 1  | Home |  1.jpg   |
   | 2  | Logo |  2.jpg   |
   | 3  | .... |  3.jpg   |
    ---- ------ ----------

它更快,更有效,更实用。

我不明白你的问题,你有具体的解释吗?