SQL,PHP - 如何选择标题和当前标题的所有副标题?

时间:2013-10-28 11:53:03

标签: php html mysql sql

我需要在我的电子商店中选择查询搜索。我有以下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

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

示例:

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 个答案:

答案 0 :(得分:1)

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

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

输出:

|  PARAM |    VALUE |
|--------|----------|
| Head 1 | v1,v2,v3 |
| Head 2 |    v4,v5 |

这是 SQLFiddle 演示

然后,您可以轻松explode() value列的值,同时迭代结果集并构建您的html。

答案 1 :(得分:0)

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

  1. 选择param的dinstict值
  2. 选择具有param =第一个循环结果的值
  3. 另一种选择是选择all - 按param排序 - 并在PHP中询问param的差异以创建视图。

答案 2 :(得分: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 
    }
}

答案 3 :(得分:0)

SQL中的简单查询

select param, value from table;

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

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