【问题标题】:display mysql results in table with subrow?在带有子行的表中显示mysql结果?
【发布时间】:2012-11-25 03:16:23
【问题描述】:

我想我可能已经过头了。我拥有的是 mysql 中的两个表,它们有一个共同的字段。我想在表格中显示一条记录,其中一行或一列由公共字段所共有的所有记录。

详细地说,我有一张带有图像的纱线表和一张带有图像的图案表。我想在一行中显示图案及其信息,然后在其下方显示与排序子行中的公共重量字段匹配的所有纱线图像。

我还通过复选框组选择图案的颜色和类别。

这是我的复选框组

<input type="checkbox" name="color[]" value="Black">Black
<input type="checkbox" name="color[]" value="Blue">Blue
<input type="checkbox" name="color[]" value="Brown">Brown
<input type="checkbox" name="color[]" value="Green">Green
<input type="checkbox" name="color[]" value="Grey">Grey
<input type="checkbox" name="color[]" value="Orange">Orange
<input type="checkbox" name="color[]" value="Pink">Pink
<input type="checkbox" name="color[]" value="Purple">Purple
<input type="checkbox" name="color[]" value="Red">Red
<input type="checkbox" name="color[]" value="Teal">Teal
<input type="checkbox" name="color[]" value="White">White
<input type="checkbox" name="color[]" value="Yellow">Yellow



<input type="checkbox" name="pattcat[]" value="Home Decor">Home Decor
<input type="checkbox" name="pattcat[]" value="Children">Children
<input type="checkbox" name="pattcat[]" value="Tops Women">Tops Women
<input type="checkbox" name="pattcat[]" value="Accessories">Accessories
<input type="checkbox" name="pattcat[]" value="Lace">Lace
<input type="checkbox" name="pattcat[]" value="Tops Men">Tops Men

这是我迄今为止的结果查询和显示表。我将所有图像名称保存在 mysql 表中并链接到路径。

extract($_GET);

$query = "(SELECT tblPatterns.PatternName, tblPatterns.Needlesize, tblPatterns.FinishedSize, tblPatterns.YardageNeeded, tblPatterns.PatternImage, tblYarn.YarnImage FROM tblYarn, tblPatterns WHERE tblYarn.WeightCategory=tblPatterns.WeightCategory && Color IN ('" . implode("','",$color) . "') && Category IN ('" . implode("','",$pattcat) . "') ORDER BY `tblPatterns`.`PatternName` ASC)" ;
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<table border='1'>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
 }
echo "<td><img src=./images/$col_value width='150' height='150' border='3' ></td>";


echo "\t</tr>\n";
}
echo "</table>\n";

我想我可能需要更改 foreach ($line as $col_value) 部分。有没有办法建立一个表并准确选择哪些数据去哪里以及是否重复?就像从纱线的图像中一样,在行下重复带有相应的图案数据?

【问题讨论】:

  • 为了代码的安全,请使用 PDO 之类的东西来降低代码的可注入性。就目前而言,它正在乞求有人做sql注入。
  • 哇...extract($_GET);

标签: php html mysql


【解决方案1】:

我想这就是你想要的:

$last_pattern = null;
while ($line = mysql_fetch_assoc($result, MYSQL_ASSOC)) {
  $col_count = count($line) - 1; // Subtract 1 because image isn't in a column
  if ($line['PatternName'] !== $last_pattern) {
    if ($last_pattern !== null) {
      echo "</td></tr>\n";
    }
    echo "<tr>\n  ";
    foreach ($line as $col_name => $col_value) {
      switch ($col_name) {
      case 'YarnImage':
        break;
      case 'PatternImage':
        echo "<td><image src='images/$col_value' /></td>";
        break;
      default:
        echo "<td>$col_value</td>";
      }
    }
    $last_pattern = $line['PatternName'];
    echo "</tr>\n  <tr><td colspan='$col_count'>\n";
  }
  $yarn_image = $line['YarnImage'];
  echo "    <img src='images/$yarn_image' width='150' height='150' border='3'/>\n";
}
if ($last_image !== null) {
  echo "</td></tr>";
}

【讨论】:

  • 这仍然给了我每个纱线图像的每个模式的重复,我得到一个 mysqlresults 列表,然后每个下面都有一个损坏的图像。
  • 我真的不知道你的数据是什么。我假设PatternImage 列是images 目录中包含您要显示的图像的文件的名称。也许它应该使用tblYarn.YarnImage。这些是文件名吗?
  • 你是说它不应该为查询返回的每一行显示一个表格行,因为表格行中有多个具有相同值的图像?所以你想将所有这些合并到一个表格行中,所有图像都在它下面?应该使用哪些列来确定它们是否相同,或者您必须比较所有列(图像除外)?
  • 是的,tblPatterns.PatternImage 和 tblYarn.YarnImage 都是文件名。它们现在都存储在 /images 目录中。我想显示 PatternImage 与来自 tblPatterns 的所有其他信息一致,然后在下面通过公共字段 WeightCategory 绑定到它我想连续显示 YarnImage。
  • 好的,我想我明白了。每当PatternName 更改时,它都会打印一行包含值和PatternImage。在其下方,它会显示一行,其中包含该模式名称的所有 YarnImages。
【解决方案2】:

你需要用 tblYarn 加入 tblPatterns :)

http://www.tizag.com/mysqlTutorial/mysqljoins.php

另外,图像 TD 在 foreach 之外,所以它不会在 $col_value 前面循环。

【讨论】:

  • 我是学生,所以请原谅我,但我还没有通过选择 FROM tblPatterns, tblYarn 加入 tblPatterns 和 tblYarn?现在我没有得到图案的图像和每张纱线图像的图案信息的重复记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2011-09-28
相关资源
最近更新 更多