Php MySQL按顺序和while循环

Php MySQL按顺序和while循环,php,Php,我已经问了一个关于这个问题的问题 RiggsFolly接受的答案中的代码工作得非常正确,但这有一个小问题。我需要几天的时间来测试它,并寻找为什么这不是解决主要目标的最佳方法。我很高兴提出一个新问题 RiggsFolly中的代码基于$current\u provider,因此如果$current\u provider已更改,while循环将检查每一轮。到现在为止,一直都还不错。但现在我需要添加一个全面的逻辑。我添加了一个true/false变量,用于简单地检查从获取的对象获取的值是否等于某个字符串

我已经问了一个关于这个问题的问题

RiggsFolly接受的答案中的代码工作得非常正确,但这有一个小问题。我需要几天的时间来测试它,并寻找为什么这不是解决主要目标的最佳方法。我很高兴提出一个新问题

RiggsFolly中的代码基于
$current\u provider
,因此如果
$current\u provider
已更改,while循环将检查每一轮。到现在为止,一直都还不错。但现在我需要添加一个全面的逻辑。我添加了一个
true/false
变量,用于简单地检查从获取的对象获取的值是否等于某个字符串。此比较侧重于特定列表项,而不是基本的
$current\u提供程序

因此,目标是
$current\u provider
检查每个获取的对象的
true/false
,并且独立于
$current\u provider
。目前,我尝试使用第二个循环进行扩展,但只想给出一个示例,希望能够清楚地了解要实现的目标:

$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$provider = NULL;
$close = false;

while ($data = $service->fetch_object()) {

    $amount_1 = $data->digit_1; //db-structure: float
    $amount_2 = $data->digit_2; //db-structure: float

    if ($amount_1 == $amount_2) {
        $close = true;
    }
    if ( $current_provider != $data->provider ) {  
        if ( $current_provider !== NULL ) {
            echo '</div>close container in case of current_provider is already set';
        }
        echo '<div class="provider">open a new container in case of current_provider is not like data->provider or empty';
        $current_provider = $data->provider;
    }
    echo 'some styling for each object';   
    if ($close === true ) { 
        echo '<div class="specific">if the amount_1 is same like amount_2 for a single object add only for this object a certain div';  
    } else {
        echo '<div>show standard container even on specific object';
    }   
echo '</div><!--close container provider-->';
}
$service=$db->query(“按提供商、艺术家从“系统”订单中选择*);
$provider=NULL;
$close=false;
而($data=$service->fetch_object()){
$amount\u 1=$data->digital\u 1;//数据库结构:float
$amount\u 2=$data->digital\u 2;//数据库结构:float
如果($amount\u 1==$amount\u 2){
$close=true;
}
如果($current_provider!=$data->provider){
if($current_provider!==NULL){
echo“在当前_提供程序已设置的情况下关闭容器”;
}
echo“如果当前_提供程序不是数据->提供程序或空的,请打开一个新容器”;
$current_provider=$data->provider;
}
回显“每个对象的一些样式”;
如果($close==true){
echo“如果单个对象的数量_1与数量_2相同,则仅为该对象添加特定div”;
}否则{
echo“即使在特定对象上也显示标准容器”;
}   
回声';
}

亲切问候。

为了避免使用打开和关闭元素,最好将它们存储在数组中,最后输出它们。

看看我的例子,很简单:

$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$provider = NULL;
$lines = array();
while ($data = $service->fetch_object()) {
    $close = false;
    if ($something === $another) {
        $close = true;
    }

    if ( $provider != $data->provider ) {  
        $lines[] = '<div class="provider">'.$data->provider.'</div>';
        $provider = $data->provider;
    }

    if ($close === true ) { 
        $lines[] = '<div class="specific">add container for just a specific object when close === true within the while loop</div>';  
    } else {
        $lines[] = '<div>show standard container on specific object</div>';
    }   
}

foreach($lines AS $line) {
    echo $line;
}
$service=$db->query(“按提供商、艺术家从“系统”订单中选择*);
$provider=NULL;
$lines=array();
而($data=$service->fetch_object()){
$close=false;
如果($something===$other){
$close=true;
}
如果($provider!=$data->provider){
$lines[]='.$data->provider';
$provider=$data->provider;
}
如果($close==true){
$lines[]='在while循环中关闭时仅为特定对象添加容器===true';
}否则{
$lines[]=“在特定对象上显示标准容器”;
}   
}
foreach($line作为$line){
回声线;
}

为了避免使用打开和关闭元素,最好将它们存储在数组中,最后输出它们。

看看我的例子,很简单:

$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$provider = NULL;
$lines = array();
while ($data = $service->fetch_object()) {
    $close = false;
    if ($something === $another) {
        $close = true;
    }

    if ( $provider != $data->provider ) {  
        $lines[] = '<div class="provider">'.$data->provider.'</div>';
        $provider = $data->provider;
    }

    if ($close === true ) { 
        $lines[] = '<div class="specific">add container for just a specific object when close === true within the while loop</div>';  
    } else {
        $lines[] = '<div>show standard container on specific object</div>';
    }   
}

foreach($lines AS $line) {
    echo $line;
}
$service=$db->query(“按提供商、艺术家从“系统”订单中选择*);
$provider=NULL;
$lines=array();
而($data=$service->fetch_object()){
$close=false;
如果($something===$other){
$close=true;
}
如果($provider!=$data->provider){
$lines[]='.$data->provider';
$provider=$data->provider;
}
如果($close==true){
$lines[]='在while循环中关闭时仅为特定对象添加容器===true';
}否则{
$lines[]=“在特定对象上显示标准容器”;
}   
}
foreach($line作为$line){
回声线;
}

我仍然不确定我是否理解您在这里真正想要实现的目标,但如果您像这样做出决策,那么除了我的建议之外,您可能还需要做些什么就更为明显了

移动

$amount_1 = $data->digit_1; 
$amount_2 = $data->digit_2; 
从一个非常好的对象属性到两个标量变量是完全不必要的。为什么要存储所有内容两次,最终会耗尽内存,但更重要的是,如果您将它们放在对象中,并使用
if($data->digital\u 1==$$data->digital\u 2)对它们进行测试,{
这永远不会混淆这些数据来自何处

同时测试循环顶部的数字,只是为了设置另一个标量变量,以便稍后在循环底部使用,这是一种浪费时间的行为。这些属性在循环顶部和底部之间不会发生变化,因此,请在您想要做出决定的位置测试实际对象,然后在那里输出所需的HTML。另一个潜在的问题是避免了融合,并没有浪费8到16字节的内存

$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$current_provider = NULL;

while ($data = $service->fetch_object()) {

    if ( $current_provider != $data->provider ) {  

        if ( $current_provider !== NULL ) {
            echo '</div>close container in case of current_provider is already set';
        }

        echo '<div class="provider">open a new container in case of current_provider is not like data->provider or empty';
        $current_provider = $data->provider;
    }

    echo 'some styling for each object';   


    // at this point we test the 2 digits and if equal
    // add an extra bit of HTML to the output
    if ($data->digit_1 == $data->digit_2) {
        echo '<div class="specific">if the amount_1 same like amount_2 for a single object add only for this object an certain div';  
    } else {
        echo '<div>show standard container even on specific object';
    }   
echo '</div>;
}
$service=$db->query(“按提供商、艺术家从“系统”订单中选择*);
$current_provider=NULL;
而($data=$service->fetch_object()){
如果($current_provider!=$data->provider){
if($current_provider!==NULL){
echo“在当前_提供程序已设置的情况下关闭容器”;
}
echo“如果当前_提供程序不是数据->提供程序或空的,请打开一个新容器”;
$current_provider=$data->provider;
}
回显“每个对象的一些样式”;
//此时,我们测试2位数字,如果相等
//向输出中添加额外的HTML
如果($data->digital_1==$data->digital_2){
echo“如果单个对象的数量_1与数量_2相同,则仅为该对象添加特定div”;
}否则{
echo“即使在特定对象上也显示标准容器”;
}   
回声';
}

我仍然不确定我是否理解您在这里真正想要实现的目标,但如果您像这样做出决策,那么除了我的建议之外,您可能还需要做些什么就更为明显了

移动

$amount_1 = $data->digit_1; 
$amount_2 = $data->digit_2; 
从一个完美的对象属性到两个标量变量是完全不必要的,为什么要存储所有东西呢