使用 PHP 将多个 MySQL 结果添加到 HTML 表中的一个单元格

Posted

技术标签:

【中文标题】使用 PHP 将多个 MySQL 结果添加到 HTML 表中的一个单元格【英文标题】:Add multiple MySQL results to one cell in a HTML table using PHP 【发布时间】:2015-03-13 23:20:51 【问题描述】:

我目前正在使用以下代码来获取数据,以便在主页的内容部分以我希望的方式显示:

$query = "SELECT distinct category FROM listings";
$result = mysql_query($query);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result))
    echo "<td>" . $row['category'] . "</td>";
    if ($catNo % 3 == 0) 
       echo "</tr><tr>"
    
    $catNo++;


echo "</tr> </table>";

结果如下:

| CAT1 | CAT2 | CAT3 |
| CAT4 | CAT5 | CAT6 |

我是否可以在数据库中存储一个链接,这意味着单击单元格时我会被带到那个 href?是否也可以将图像存储在数据库中并在单元格中显示该类别的名称?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

简短回答:是的,是的。长答案:向表中添加一个可以存储链接的列,以便您可以将其包含在 html 的锚标记中。对于图像,通常最好将实际图像存储在文件系统中,并将文件路径存储在数据库中。如果您需要将图像存储在数据库中,请查看 base64 编码和 blob 列。顺便说一句:抛弃 mysql* 函数,开始使用 mysqli* 函数或 PDO。 谢谢 Gareth,我知道如何将链接和图像文件路径添加到数据库,但我如何将其全部读入一个单元格中的表格中? 将您的查询更改为从列表中选择类别、链接、文件路径,您将在 $row['link'] 和 $row['filepath'] 变量中找到链接和文件路径。您的表格单元格变为 $row['category'] (显然你需要把它整理成一个适当的 php 字符串等,但要点就在那里) 会试试的,谢谢:) 【参考方案1】:

因为您使用 distinct 来获取结果,这对我来说意味着该表中有更多具有相同类别的行。如果正确,那么您应该创建另一个名为“listings_links”的表来存储每个链接和图像一次,然后将此表连接到列表表。

CREATE TABLE listings_links(
id INT AUTO_INCREMENT NOT NULL,
category CHAR(10) NOT NULL, //Use here the exact type you used in the listings table
link VARCHAR(200) NOT NULL,
image_path VARCHAR(200) NOT NULL,
PRIMARY KEY(id),
KEY(category));

然后使用这个:

<?php
$sql  = "SELECT distinct listings.category, listings_links.link, listings_links.image_path FROM listings ";
$sql .= "LEFT JOIN listings_links on (listings.category=listings_links.category) "
$sql .= "ORDER BY 1;";
$result = mysql_query($sql) or die(mysql_error()."<br>".$sql);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result))
   echo '<td><a href="'.$row['link'].'"><img src="'.$row['image_path'].'" border="0" />'.$row['category'].'</a></td>';
    if ($catNo % 3 == 0) 
    echo "</tr><tr>";
    
    $catNo++;
 

echo "</tr> </table>";
?>

为了获得最佳性能(如果您有很多类别),还要在您的列表表中为“类别”建立索引。

更新: 我还建议将图像存储在文件系统而不是数据库中。这样页面加载速度会更快(浏览器可以并行下载更多图像)并且您不必将图像加载到数据库中(您应该在刷新类别图像时始终这样做)并且代码是也更复杂。但是可以,但不推荐。

更新 2: 你没有要求它,但如果我是你,我不会在数据库中存储链接或图像路径。我建议创建一个可以通过其参数显示您想要的内容的 PHP(例如:show_cat.php?cat1)并在链接中使用它并以我可以通过类别名称直接链接到它们的方式存储所有图像(例如:/images/categories/cat1.jpg、/images/categories/cat2.jpg 等)。 这样您就不必更改数据库,只需将链接和图像路径添加到循环中。如果需要,您还可以检查图像文件是否存在,并显示“无可用图像”图片。

【讨论】:

试过了,但我得到了错误:查询为空 SELECT distinct listings.category,listings_links.link,listings_links.image_path FROM Listings LEFT JOIN listings_links on (listings.category=listings_links.category) ORDER BY 1个;我已经用数据填充了 listings_links 表。 @StevenTrainor 你能告诉我你的表格的内容吗?或者至少几行? 当然,不确定是否有比这里更方便的方法?只是有几行虚拟数据atm。 Listings表有listingid,title,description,category,subcategory,userid和一条记录的数据:1,chandalier,brand new light,electrical,lighting,1个listings_links表有你建议的格式并且有数据:1,electrical,@ 987654321@, img/profilepics/2ad14cd7af.png @StevenTrainor 你有 PhpMyAdmin 或任何其他可以测试查询的 SQL 客户端吗?查询不应该是空的,因为它使用 LEFT JOIN,这意味着,如果第二个表中不存在某些内容,您会在链接和 image_path 字段中获得 NULL 值,但存在该行。 是的,我正在使用 MySQL Workbench,当我查询以下内容时:SELECT distinct Listings.category, listings_links.link, listings_links.image_path FROM Listings LEFT JOIN listings_links on (listings.category=listings_links.category) ORDER BY 1个;它给了我结果,但在 PHP 中我必须添加;在每一行之后,否则页面崩溃,当我这样做时,我得到查询空结果:/【参考方案2】:

试试这样的:

<?php
$query = "SELECT distinct category,link,image FROM listings";
$result = mysql_query($query);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result))
   echo '<td><a href="'.$row['link'].'">'.$row['category'].'</td>';
   echo '<td><img src ="/path/to/image/'.$row['image'].'"></td>';
    if ($catNo % 3 == 0) 
    echo "</tr><tr>";
    
    $catNo++;
 

echo "</tr> </table>";
?>

【讨论】:

以上是关于使用 PHP 将多个 MySQL 结果添加到 HTML 表中的一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

具有多个搜索参数和显示结果的 PHP/HTML/MySQL 数据库查询

将多个mysql查询组合成一个结果

PHP MySQL数据分页

如何在执行php脚本后将mysql查询结果返回到html页面?

使用 PHP 将多行 Oracle 结果集插入 MYSQL

使用 PHP 上传多个图像,并将条目提交到 mysql