1

嗨,我正在为一个网站写一个菜单,该网站有多个基于我的国家的州,每个州都有很多城市。

在代码中一切都很好..但我被要求在菜单中“划分”一种状态,分为两种状态,例如“状态 1 AL”,然后是“状态 1 M - Z”

我的第一个想法是在 DB 中创建两个状态,就像我将创建两个状态一样简单。但是,然后在所有站点中,我将拥有 2 个状态而不是 1 个,就像它应该的那样。

所以我认为必须有办法做到这一点。如果没有,我将不得不做一个 HTML 菜单,然后手动更新它,这很糟糕。如果菜单根据查询自动更新会更好......

这是我的代码和查询:状态的顺序,只是为了获得我需要的 2 列菜单。但是我怎样才能“划分”或“分裂”一个状态并使其成为两个呢?

 <?php  
$result = mysqli_query($con ,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 


$result = mysqli_query($con,"SELECT * FROM table_states WHERE ccode='MX' Order by find_in_set(scode, '01,17,02,18,03,19,04,20,05,21,06,22,07,23,08,24,09,25,10,26,11,27,12,28,13,29,14,30,15,31,33,32,16')");
while($row = mysqli_fetch_array($result))
{?>

<li class="menuin<?php echo $row['sname'];?>"><a class="st" href="javascript:void(0);"><?php echo $row['sname'];?></a>
    <ul class="ulCityDN<?php echo $row['sname'];?>" id="menusub<?php echo $row['sname'];?>">
        <?php $resultSub = mysqli_query($con,"SELECT * FROM `table_cities` where ccode='$row[ccode]' and scode='$row[scode]' limit 0,30");
        //echo "SELECT * FROM `table_cities` where ccode='$row[ccode]' and scode='$row[scode]' limit 0,30";
        while($rowSub = mysqli_fetch_array($resultSub)){
        ?>  
        <li><a href="index.php?page=location/change-city/<?php echo $rowSub['id'];?>&<?php echo $row['scode'];?>&city=<?php echo $rowSub['city'];?>"><?php echo $rowSub['city'];?></a></li>
        <?php }?>
    </ul>
</li>

<?php   }
?>
</ul> 
</div>  
</div>
</div>
<?php }?>
4

2 回答 2

1

第一个查询可能是UNION我发布的查询。它可能是这样的:

(
    SELECT
    (
        CASE WHEN sname = 'State 1' THEN 'State 1 A-L'
        ELSE sname
        END
    ) AS sname,
    ccode,
    scode
    FROM table_states
    WHERE ccode='MX'
)
UNION
(
    SELECT
    'State 1 M-Z' AS sname,
    '01' AS ccode, /* ccode from State 1 */
    '02' AS scode  /* scode from State 1 */
)
Order by find_in_set(scode, '01,17,02,18,03,19,04,20,05,21,06,22,07,23,08,24,09,25,10,26,11,27,12,28,13,29,14,30,15,31,33,32,16')

我没有测试CASE/WHEN. 但它应该重命名State 1State 1 A-L. 第二个查询只返回硬编码的值。在这里您可以硬编码其他 ccode 或 scode 的State 1 M-Z. 然后你必须在城市的数据库中更改它。

另一个想法是在 PHP 中为城市做条件:

if ($row['sname'] == 'State 1 A-L') {
    $sql = "
        SELECT * FROM `table_cities`
        where ccode='$row[ccode]'
        and scode='$row[scode]'
        AND city < 'M' limit 0,30";
}
else if ($row['sname'] == 'State 1 M-Z') {
    $sql = "
        SELECT * FROM `table_cities`
        where ccode='$row[ccode]'
        and scode='$row[scode]'
        AND city > 'L' limit 0,30";
}
else {
    $sql = "
        SELECT * FROM `table_cities`
        where ccode='$row[ccode]'
        and scode='$row[scode]' limit 0,30";
}
于 2013-10-10T23:42:51.513 回答
0

为什么不在city您的table_cities查询中排序?然后您可以简单地检查城市名称是否以某个字母开头。一旦你通过了那封信,终止当前的子菜单并开始写一个新的。

table_states顺便说一句,如果您首先加入table_cities查询并按州排序,则可以在单个查询中完成所有这些操作。我在上面概述的相同技术将适用于循环状态,终止当前菜单并在每次找到新状态时启动新菜单。

于 2013-10-10T23:43:10.287 回答