循环遍历单行的列

时间:2014-11-04 12:30:04

标签: php mysql loops

我有一个表将用户数据保存在一行中,它看起来像这样

enter image description here

我要做的是按照优先顺序列出它们,结果看起来像这样

Everything (because its priority is 1)
Something (Because its priority is 2)
Anything (Because its priority is 3)

目前为了达到这个目的,我正在使用else if语句并且它正常工作

if (Data1_Priority == '1'){
echo Data1
}elseif{
.....
}

我想知道是否可以使用某个循环而不是if else

按优先顺序显示数据

我真的很感激有关如何实现这一目标的任何帮助。

3 个答案:

答案 0 :(得分:1)

你想要取消它们并对它们进行分类吗?

select d.*
from (select data1 as data, data1priority as priority from table union all
      select data2 as data, data2priority as priority from table union all
      select data3 as data, data3priority as priority from table
     ) d
order by priority;

作为一个注释:具有相似的列名仅仅由数字不同表示数据库设计不佳。通常最好有更少的列和更多的行。

答案 1 :(得分:1)

正如其他人所说,你应该在数据库中做这个(可能需要重新设计),但对于php解决方案,你可以创建一个按优先级索引的临时数组,对密钥进行排序,然后迭代它:

$row = [
    'data1'=>'something',
    'data1_priority'=>2,
    'data2'=>'anything',
    'data2_priority'=>3,
    'data3'=>'everything',
    'data3_priority'=>1,

];
$temp=[];

for($i=1; $i<(count($row)/2)+1; $i++){
    $temp[$row['data'.$i.'_priority']]=$row['data'.$i];
}
ksort($temp);
foreach($temp as $element)
    echo $element . '<br>';

实例:http://codepad.viper-7.com/O3D54e

答案 2 :(得分:0)

for ($pri = 1; $pri<=3; $pri++)
{
    for($d == 1; $d<=3; $d++)
    {
        if ($r["Data".$d."_Priority"] == $pri)
        {
           echo $r["Data".$d];
        }
    }
}

未经测试,但是朝着正确的方向发展了一点?