Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysqli查询中将一行分成两行_Php_Mysqli - Fatal编程技术网

Php 在mysqli查询中将一行分成两行

Php 在mysqli查询中将一行分成两行,php,mysqli,Php,Mysqli,嗨,我在为一个网站写菜单,这个网站基于我的国家有多个州,每个州有很多城市 在代码中,一切都运行良好。。但我被要求将菜单中的一个状态“划分”为两个状态,例如“状态1 A-L”和“状态1 M-Z” 我的第一个想法是在DB中创建两个状态,所以就像我将创建这两个状态一样简单。但是,在所有的站点中,我会有2个状态,而不是1个,就像它应该的那样 所以我认为一定有办法做到这一点。。如果没有,我将不得不做一个HTML菜单,然后只是手动更新,这很糟糕。如果菜单根据查询自动更新会更好 这是我的代码和查询:状态的顺序

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

在代码中,一切都运行良好。。但我被要求将菜单中的一个状态“划分”为两个状态,例如“状态1 A-L”和“状态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 }?>

第一个查询可以是我发布的
联合查询。可能是这样的:

(
    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')
我没有测试
案例/WHEN
。但它应该将
state1
重命名为
state1a-L
。第二个查询只返回硬编码的值。在这里,您可以为
状态1 M-Z
硬编码其他ccode或scode。然后你必须在城市数据库中更改它

另一个想法是在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";
}
if($row['sname']=='state1a-L'){
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
和scode='$row[scode]'
以及城市<'M'限值0,30”;
}
else if($row['sname']=='State 1 M-Z'){
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
和scode='$row[scode]'
和城市>'L'限值0,30”;
}
否则{
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
而scode=“$row[scode]”限制为0,30”;
}

第一个查询可以是我发布的
联合查询。可能是这样的:

(
    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')
我没有测试
案例/WHEN
。但它应该将
state1
重命名为
state1a-L
。第二个查询只返回硬编码的值。在这里,您可以为
状态1 M-Z
硬编码其他ccode或scode。然后你必须在城市数据库中更改它

另一个想法是在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";
}
if($row['sname']=='state1a-L'){
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
和scode='$row[scode]'
以及城市<'M'限值0,30”;
}
else if($row['sname']=='State 1 M-Z'){
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
和scode='$row[scode]'
和城市>'L'限值0,30”;
}
否则{
$sql=”
从“表”中选择*城市`
其中ccode='$row[ccode]'
而scode=“$row[scode]”限制为0,30”;
}

为什么不在您的
表\u cities
查询中按城市下单?然后,您可以对城市名称是否以某个字母开头进行简单检查。传递该字母后,终止当前子菜单并开始在新的子菜单中写入


另一方面,如果您将
table_states
加入到
table_cities
查询中,并首先按州排序,那么您可以在一个查询中完成所有这一切。我上面概述的相同技术也适用于循环状态、终止当前菜单并在每次发现新状态时启动新菜单。

为什么不在
表\u cities
查询中仅按
城市
排序?然后,您可以对城市名称是否以某个字母开头进行简单检查。传递该字母后,终止当前子菜单并开始在新的子菜单中写入


另一方面,如果您将
table_states
加入到
table_cities
查询中,并首先按州排序,那么您可以在一个查询中完成所有这一切。我上面概述的相同技术也适用于循环状态、终止当前菜单并在每次发现新状态时启动新菜单。

这是一个好问题。如果不改变数据库,这将不容易解决。您可以执行
UNION
查询,将两个状态都输入第一个结果。但这些城市都是指同一个州。因此,你必须更改城市的ccode或scode,或者在查询时执行大量的
CASE
操作。好的,联合部分听起来很有趣,请看一看,你提到的第二个问题,我需要为第一个州划分类别divide a-l,所以这里只有A到L的城市应该在第一部分,只是我对工会一无所知,这是个好问题。如果不改变数据库,这将不容易解决。您可以执行
UNION
查询,将两个状态都输入第一个结果。但这些城市都是指同一个州。因此,你必须更改城市的ccode或scode,或者在查询时执行大量的
CASE
操作。好的,联合部分听起来很有趣,请看一看,你提到的第二个问题,我需要为第一个州划分类别divide a-l,所以这里只有A到L的城市应该在第一个“片段”中,只是我对unionWell一无所知,因为如果我这样做的话,2列与设计师和客户设定的顺序不匹配。。这就是为什么我把你的想法(那是第一个模型)改为这个。。正如我所说,我需要将一个状态“划分”为两个,但在查询中。。。。因为在网站内“分类”、“新闻”、“论坛”的所有内容,必须只给我一个状态(在菜单中划分的状态)…好吧,因为如果我这样做的话,这两列不符合设计师和客户设定的顺序。。这就是为什么我把你的想法(那是第一个模型)改为这个。。正如我所说,我需要“划分”一个sta