首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL按并执行循环顺序

MySQL按并执行循环顺序
EN

Stack Overflow用户
提问于 2015-07-22 12:05:09
回答 2查看 198关注 0票数 1

我已经问了一个属于这个问题的问题,here

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

来自RiggsFolly的代码是基于$current_provider的,所以while循环会检查每一轮$current_provider是否发生了变化。到目前一切尚好。但现在我需要增加一个全面的逻辑。这意味着我添加了一个true/false变量,它简单地检查从获取的对象中得到的值是否等于某个字符串。这种比较的重点是特定的列表项,而不是基本的$current_provider

因此,目标是$current_provider检查每个获取的对象是否为true/false,并且将独立于$current_provider。目前,我尝试用第二个循环进行扩展,但只想举一个例子,希望能够清楚地实现以下目标:

代码语言:javascript
复制
$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-->';
}

致以亲切的问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-22 14:28:42

我仍然不确定我是否理解你到底想在这里取得什么成就,但也许如果你这样作出决定,那么除了我的建议之外,你还需要做些什么,这一切都会变得更加明显。

移动,移动

代码语言:javascript
复制
$amount_1 = $data->digit_1; 
$amount_2 = $data->digit_2; 

从一个非常好的对象属性到2个标量变量完全没有必要--为什么每次存储两次--最终会耗尽内存,但更重要的是,如果您将它们留在对象中并使用if ($data->digit_1 == $$data->digit_2) {测试它们--它永远不会混淆这些数据的来源!

此外,测试循环顶部的数字只会设置另一个标量变量,以便稍后在循环底部使用,这是浪费时间。这些属性在循环的顶部和底部之间不发生变化,因此测试要在哪里做出决定的实际对象,然后立即输出所需的HTML。另一个潜在的混乱避免和8到16字节的内存没有浪费!

代码语言:javascript
复制
$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>;
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-22 12:23:42

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

看看我的例子,很简单:

代码语言:javascript
复制
$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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31562616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档