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

Add multiple MySQL results to one cell in a HTML table using PHP

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

$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 |

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

如有任何帮助,我们将不胜感激。

谢谢。

因为您使用 distinct 来获取结果,所以对我来说这意味着 table 中有更多行具有相同的类别。如果它是正确的,那么你应该创建另一个 table,称为 "listings_links" 来存储每个 link 和图像只一次,然后将这个 table 加入列表 table .

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>";
?>

为了获得最佳性能(如果您有很多类别),请在您的列表 table 中为 "category" 创建一个索引。

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

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

尝试这样的事情:

<?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>";
?>