【问题标题】:MySQL : Create table comparison productMySQL:创建表比较产品
【发布时间】:2018-05-11 09:31:05
【问题描述】:

我很困惑什么时候会显示产品比较表。我有 2 张桌子 t_product_itemt_product_specification。这是表结构的图片:

我想展示这样一张图片的产品对比:

脚本:

<table border="1">
    <tr style="background-color: #C3C3C3">
        <td>Product</td>
        <td>Spec Name</td>
        <td>Spec Value</td>
    </tr>
    <?php
        $sql = mysqli_query($conn, "SELECT item, spec_name, spec_value FROM t_product_item JOIN t_product_specification USING (item_id)");
        if (mysqli_num_rows($sql)>0){
            while ($row=mysqli_fetch_array($sql)){
    ?>
    <tr>
        <td><?php echo $row['item']?>
        <td><?php echo $row['spec_name']?>
        <td><?php echo $row['spec_value']?>
    </tr>
    <?php
        }}
    ?>
</table>

它看起来像这样

结果:

我如何在逻辑上构造或查询表格以像示例图片一样显示?

【问题讨论】:

  • 你得到答案了吗?
  • 到现在还没有:(
  • 你试试我的答案吗?我的回答有什么问题???
  • 您的回答确实对我有帮助,但在使用 while 循环在表中实现时我仍然感到困惑
  • 如果表 t_product_item 中的数据数据记录的内容是动态的,例如:item_id 3,4 或 5。如果 item_id 发生变化,我无法更改查询的内容

标签: javascript php mysql sql


【解决方案1】:

将您的 SQL Query 更改为:

SELECT spec_name,MAX(CASE WHEN ItemId=1 THEN spec_value END)`Samsung Galaxy S8+`
    ,MAX(CASE WHEN ItemId=2 THEN spec_value END)`Samsung Galaxy S8` 
FROM t_product_item JOIN t_product_specification USING (item_id)
GROUP BY spec_name
ORDER BY MIN(spec_Id)

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    您正在为每个 &lt;tr&gt; 行循环遍历 item_id。相反,您应该通过spec_name 循环&lt;tr&gt;,并为每个单元格&lt;td&gt; 循环通过产品。

    在伪代码中:

        <table>
          <thead>
            <tr>
              <th>&nbsp;</th> <!-- Empty cell for spacer -->
    
              for (item in item_list) {
                <th>item.name</th>
              }
    
            </tr>
          </thead>
    
          <tbody>
            <tr>
    
              for (spec in spec_list) {
                <td>spec.name</td>
              }
    
              for (item in item_list) {
                <td>item.spec[spec.name]</td> <!-- display spec detail of each item -->
              }
    
            </tr>
          </tbody>
        </table>
    

    在通过表格循环之前,您可能必须重组数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多