PHP:订购“ID”foreach

时间:2013-05-16 17:51:41

标签: php mysql database foreach sql-order-by

有没有办法先用最新的内容(降序ID)显示foreach? 我试过找,但我无法做任何工作。

<?php

include_once('includes/connection.php');
include_once('includes/deal.php');

$deal = new Deal;
$deals = $deal->fetch_all();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GameDeals</title>
<link rel="shortcut icon" type="image/x-icon" href="assets/favicon.png">
<link rel="stylesheet" href="assets/deals.css" />
</head>

<body>

<div class="container">
<!-- START GAMEDEALS -->

<?php foreach ($deals as $deal) { ?>

<div class="deal-info">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100">ID: <?php echo $deal['deal_id']; ?></td>
        <td width="500"><?php echo $deal['deal_title']; ?></td>
        <td width="200">TS: <?php echo $deal['deal_timestamp']; ?></td>
      </tr>
    </table>
</div>

<div class="deal-content">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100"><img src="<?php echo $deal['deal_imageurl']; ?>" width="100" height="100" /></td>
        <td width="400"><?php echo $deal['deal_content']; ?></td>
        <td>
            <table width="300" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td>Regular Price: <?php echo $deal['deal_normalprice']; ?></td>
              </tr>
              <tr>
                <td>Offer Price: <?php echo $deal['deal_offerprice']; ?></td>
              </tr>
              <tr>
                <td>Off: <?php echo $deal['deal_percent']; ?></td>
              </tr>
            </table>
        </td>
      </tr>
    </table>
</div>

<div class="deal-ref">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="500">URL: <?php echo $deal['deal_url']; ?></td>
        <td width="300">ENDS: <?php echo $deal['deal_expire']; ?></td>
      </tr>
    </table>
</div>

<?php } ?>
<!-- END GAMEDEALS -->
</div>

</body>
</html>

提前致谢!

更多text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text.more text更多文字。

6 个答案:

答案 0 :(得分:2)

如果您无法更改SQL查询本身,则需要在执行foreach之前对数组进行排序。 PHP的内置usort函数非常适用于此 - 它根据数组的值和用户定义的比较函数就地对数组进行排序:

function compareRows($a, $b)
{
    if ($a['deal_id'] == $b['deal_id']) {
        return 0;
    }
    return ($a['deal_id'] < $b['deal_id']) ? 1 : -1;
}
usort($deals, "compareRows");

$deals将按'deal_id'字段降序排序。请记住,这是MySQL优化的那种操作,在PHP中执行此操作效率要低得多。

答案 1 :(得分:1)

Foreach不会对您的数组进行排序,您需要在查询中处理从数据库中获取数据的数据,或者在获取数据之后以及在foreach之前从其他方法获取数据。

答案 2 :(得分:1)

您应该在ORDER BY id DESC MySQL声明中使用SELECT

答案 3 :(得分:1)

您可以通过在sql查询中的ORDER BY id DESC子句之后放置mysql列名来获得所需的顺序,即ASCENDING。

答案 4 :(得分:1)

您将$deal命名为对象,然后将其指定为分配给数组。 IMO,您需要将$deal更改为其他

答案 5 :(得分:1)

您可以将array_reverse用于数组,但对于数据库源项,您应该遵循其他答案之一。这只有在数组以升序排序

时才有效