在MySQL之后保留PHP排序

时间:2018-11-04 17:59:33

标签: php mysql

我正在构建一个“结果”页面,该页面计算特定ID在数组中出现的次数。

我执行的代码对数组的指定元素执行array_multisort:

      $colpubid = array_column($votedpubs, 'pubid');
      $colcount = array_column($votedpubs, 'count');
      array_multisort ( $colcount, SORT_DESC, $colpubid, SORT_ASC, $votedpubs );

当我将其显示在页面上时,得到以下信息:

PubIDCount

BES / 262 4
BES / 527 3
BES / 572 2
BES / 158 1
BES / 167 1
BES / 193 1
BES / 238 1

但是,当我然后从MySQL数据库中查找各个元素时,顺序将被覆盖,并且现在将根据从数据库中检索到的顺序对结果进行排序。

Order after MySQL lookup

这使用以下代码:

    while ($row3 = mysqli_fetch_array($pubidresult))
    {
       foreach($votedpubs as $thispub )
          {
            if ($row3['PubID'] == $thispub['pubid']) {
                echo "<tr><td>" . $thispub['pubid'] . "</td><td>" . $thispub['count'] . "</td><td>" . $row3['Name'] . "</td><td>" . $row3['Town'] . "</td></tr>\n";
            }
          }
    }

有没有办法我仍然可以执行MySQL查找以添加额外的字段(名称和镇),同时保持计数递减的排序顺序?

1 个答案:

答案 0 :(得分:0)

我能想到的解决方案意味着首先通过pubID为$votedpubs数组建立索引  (使用array_column()),然后在数据库查询的while()循环中,将详细信息添加到$votedpubs数组中。

$votedpubs = array_column($votedpubs, null, 'pubid');
while ($row3 = mysqli_fetch_array($pubidresult))
{
    $votedpubs[$row3['PubID']]['Name'] = $row3['Name'];
    $votedpubs[$row3['PubID']]['Town'] = $row3['Town'];
}

foreach ( $votedpubs as $thispub )  {
    echo "<tr><td>" . $thispub['pubid'] . "</td><td>" . $thispub['count'] . "</td><td>" . $thispub['Name'] . "</td><td>" . $thispub['Town'] . "</td></tr>\n";
}