2015-09-09 192 views
0

我有一个mysql数据库,其中包含多个图像(路径)在单独的列下,即id,image1,image2,image3等。从MySQL DB获取图像路径

我使用下面的代码来检索基于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张,空白图像占位符显示?这可以防止或将需要一种不同的方法来存储图像?

+0

什么会预期的结果是?没有输出的图像丢失?你需要将它们保存在某种网格中吗? – DeDee

+0

应该没有输出丢失的图像 –

+0

显示您的表格图像值。 –

回答

-1

你的db结构部分错误。如果有,他们与相同ID不止一个图像,你应该在不同的表存储它们像

images_table

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

所以,你将有机会增加11或20的图像你相同的ID 。如果你有100张相同ID的图片,你会为他们创建+90列吗?

-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 | 
+-------+----------+ 
-1

您的系统显示影像单独列每个图像是无效的。

根本没有效果。

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

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

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

1

根据您的数据库设计,您可以将图像的名称存储在数组中而不是十个不同的变量。因此,如果表格行中只有五个图像,则数组将只填充五个图像名称。在显示时,您可以使用“foreach”循环来提取图像名称。

示例代码: 在阵列存储图像

$query = "SELECT * FROM `images` WHERE ` id`='" . $id . "'"; 
$result = mysql_query($query); 
while($fetch = mysql_fetch_array($result)){ 
$image[1] = $fetch['image1']; 
$image[2] = $fetch['image2']; 
$image[3] = $fetch['image3']; 
$image[4] = $fetch['image4']; 
$image[5] = $fetch['image5']; 
$image[6] = $fetch['image6']; 
$image[7] = $fetch['image7']; 
$image[8] = $fetch['image8']; 
$image[9] = $fetch['image9']; 
$image[10] = $fetch['image10']; 
} 

显示图像

foreach($image as $pic) { 
echo '<a data-Img='.$pic.' href='.$pic.'>';echo '<img class="Tmb" alt="" src='.$pic.'></a>'; 
} 

希望这将有助于...

+0

谢谢,如果我将数据库设计更改为两列ID&Path,我仍然可以使用此代码检索并存储并显示图像吗? DB中的图像路径根据行的ID命名,即200-1.jpg,200-2.jpg,200-3.jpg –

+0

是的,你可以使用数组格式。在这种情况下尝试这样的代码。while($ fetch = mysql_fetch_array($ result)){ $ image_array [] = $ fetch ['image']; } –

+0

谢谢,但这不显示任何图像?数据库中有5个图像在“图像”列下。所有的都被分配为200的ID,该ID是该页面的URL中的ID。我已经在原始答案中使用了第二段代码以及$ image_array [] = $ fetch ['image'];上面的查询,但没有显示? –