在SQL中联接相同的值并遍历它们

时间:2019-06-05 19:55:27

标签: php sql

在SQL中考虑此表:

REGION:        COUNTRY:
Lombardia      Italy
Sicily         Italy
Sardinia       Italy
Borgogne       France
Corsica        France  

在PHP中,如何创建一个下拉菜单,在其中循环显示值,我会显示一个唯一的国家/地区名称,并在其下显示不同的区域?

就我所知,建立了一个循环以显示所有区域,但我需要按国家/地区对它们进行视觉划分。

   $rowreg=mysql_num_rows($sqlreg);

      $sqlregione=mysql_query("select region from regions order by country");

      for($z = 0; $z < $rowreg; $z++){
         $rigareg = mysql_fetch_assoc($sqlreg);           
         echo"<option>". $rigareg['regione']."</option>";

我想到了一个嵌套数组,但这只会使我更加困惑。

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您希望组合框看起来像这样:

France:
  Borgogne
  Corsica
Italy:
  Lombardia
  Sicily
  Sardinia

您可以使用选项的value属性将国家/地区与区域项目一起存储。

但是,我不认为您可以真正在PHP中调整组合框,以使某些项目不可单击并以另一种字体显示,或者看起来像是标题。在我看来,仍然有两个选择:

  1. 使国家/地区可点击,并在用户错误选择时提醒用户。
  2. 使国家/地区禁用物品。

填充组合框的代码:

$result = mysql_query("select country, region from regions union all select distinct country, null from regions order by country, region");
while ($row = mysql_fetch_assoc($result))
{
  if(is_null($row['region']))
    echo '<option value="' . $row['country'] . '" disabled>' . $row['country'] . '</option>';
  else
    echo '<option value="' . $row['region'] . '#' . $row['country'] . '">' . $row['region'] . '</option>';
}

如果要使国家可点击,请删除disabled

(我不精通PHP,因此我的代码中可能会出现一些错误。此外,PHP文档已将mysql_query弃用:https://www.php.net/manual/de/function.mysql-query.php

答案 1 :(得分:0)

您可以跟踪列表中最后一个国家的输出。如果当前国家/地区不同,则输出国家/地区作为选项。在第一个区域中,该国家/地区将与最后一个国家/地区不同(不会是什么)。

但是,可以在下拉列表中选择这些国家/地区选项。因此,您可能需要添加验证,以确保用户选择了一个地区而不是一个国家。