0

我需要一个选择查询以在我的电子商店中进行搜索。我有以下mysql表

id  |  product_id  |   param   |  value
 1  |      123     |   Head 1  |   v1
 2  |      456     |   Head 1  |   v2
 3  |      789     |   Head 1  |   v3
 4  |      abc     |   Head 2  |   v4
 5  |      def     |   Head 2  |   v5

我需要选择不同的“参数”和与参数对应的值。

例子:

Head 1 - v1, v2, v3
Head 2 - v4, v5

我需要将它添加到HTML

<h3>Head 1</h3>
<div class="vyber">
 <select>
  <option>v1</option>
  <option>v2</option>
  <option>v3</option>
 </select>
</div>

<h3>Head 2</h3>
<div class="vyber">
 <select>
  <option>v4</option>
  <option>v5</option>
 </select>
</div>

我的SQL

SELECT p.*
FROM Parametre p
JOIN produkty pr ON p.ProduktID = pr.ProId      
WHERE pr.KATEGORIA_URL = '$Kategoria'
GROUP BY p.Hodnota
ORDER BY p.Param, p.Hodnota

这是PHP代码

$pamet = '';
$konec = '';
while($ParamVyhladavanieResult = mysqli_fetch_object($ParamVyhladavanie)){

  $Param = htmlspecialchars($ParamVyhladavanieResult->param);
  $Hodnota = htmlspecialchars($ParamVyhladavanieResult->value);
  $CisloHodnoty = $ParamVyhladavanieResult->id;

  if (($ParamVyhladavanieResult->param)!=$pamet)
  {
      $pamet = $ParamVyhladavanieResult->param;

      echo "
      <h3>".$Param."</h3>
      <div class=\"vyber\">
      <select class=\"bielePozadie\" style=\"height:35px;color:#000;border:1px solid grey;outline:none;width:100%\">
      <option value=\"0\">--nevybraté--</option>
      ";
      $konec = "</select>
      </div>";
  }

  echo "   <option value=\"$CisloHodnoty\">".$Hodnota."</option>
  ";
}
echo $konec;
4

4 回答 4

1

如果您使用的是 MySQL,您可以使用GROUP_CONCAT()

SELECT param, GROUP_CONCAT(value) value
  FROM table1
 GROUP BY param

输出:

| 参数 | 价值 |
|--------|----------|
| 头 1 | v1,v2,v3 |
| 头 2 | v4,v5 |

这是SQLFiddle演示

然后,您可以在遍历结果集并构建 html 时轻松地获取列explode()值。value

于 2013-10-28T12:05:28.357 回答
0

SQL中的简单查询为

select param, value from table;

在 HTML 中,根据您的要求,我们可以将带有 json 的结果传递给 Javascript 并从那里处理。使用 Jquery 来缩短代码

<div id="SelectHolder">
</div>

<script type="text/javascript">
var ResultArray = <?php echo json_encode(mysqlresult, JSON_UNESCAPED_SLASHES); ?>;
for(var i=0; i<ResultArray.length;i++)
{
   if(document.getElementbyId(ResultArray[i][0])!=undefined && document.getElementbyId(ResultArray[i][0])!=null)
   {
      $('#'+ResultArray[i][0]).append('<option>'+ResultArray[i][1]+'</option>');
   }
   else
   {
     $('#SelectHolder').append('<select id="'+ResultArray[i][0]+'">'+ResultArray[i][0]+'</select>');
     $('#'+ResultArray[i][0]).append('<option>'+ResultArray[i][1]+'</option>');
   }
}
</script>
于 2013-10-28T12:07:36.687 回答
0

你可以例如。制作2个嵌套循环:

  1. 选择参数的明确值
  2. 选择具有 param = result from first loop 的值

另一种选择是全选 - 按参数排序 - 并询问 PHP 中的参数差异以创建视图。

于 2013-10-28T12:01:43.437 回答
0
//First select DISTINCT params
$result = mysql_query('SELECT DISTINCT param FROM YOUR_TABLE');
while($row = mysql_fetch_array($result))
{
    // now fetch its values
    $sub_result = mysql_query('SELECT * FROM YOUR_TABLE WHERE param = "'.$row['param'].'"');
    while($sub_row = mysql_fetch_array($sub_result))
    {
         // generate your HTML here
    }
}

替代方法

$last_param = '';
$result = mysql_query('SELECT * FROM YOUR_TABLE ORDER BY param');
while($row = mysql_fetch_array($result))
{
    if($row['param'] != $last_param)
    {
       if($last_param != '')
       {
         ?>
            </select>
     </div>
         <?php 
       }
       $last_param = $row['param'];
       ?>
        <h3><?php echo $last_param; ?></h3>
        <div class="vyber">
          <select>
       <?php
    }
    else
    {
       ?>
       <option><?php echo $row['value'];?></option>
       <?php 
    }
}
于 2013-10-28T12:05:42.587 回答