我有一个表将用户数据保存在一行中,它看起来像这样
我要做的是按照优先顺序列出它们,结果看起来像这样
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
我真的很感激有关如何实现这一目标的任何帮助。
答案 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>';
答案 2 :(得分:0)
for ($pri = 1; $pri<=3; $pri++)
{
for($d == 1; $d<=3; $d++)
{
if ($r["Data".$d."_Priority"] == $pri)
{
echo $r["Data".$d];
}
}
}
未经测试,但是朝着正确的方向发展了一点?